Ⅰ C51單片機鍵值重復讀取
你這程序這么寫,在調用時肯定會重復讀取一個鍵值的。
改進方法:在沒有按鍵時,讀取的鍵值應該是多少,知道嗎,或者能計算出來嗎?用xx表示。
主程序要用一個變數,假設叫keyx,保存原鍵值的,初始值就是那個未按鍵的值keyx=xx。
好了,在主程序調用時,判斷鍵值,是未按鍵:keyx=xx,就不處理。繼續調用。
如果有按鍵,按鍵值=keyx?不等,說明是新按鍵了,keyx=新鍵值。
這時會出現重復讀取的現象了,但是:按鍵值=keyx了,就不處理了。
這樣有按鍵,只處理一次。
當松開按鍵,讀取的是按鍵值xx,keyx=xx了。
再有新按鍵,按鍵值=keyx肯定不成立,則又有新按鍵,依此類推,就可以了。
Ⅱ 51單片機每次讀io時是在整個程序裡面只寫1次1還是每次讀的時候都寫1,(這個io只用來讀不寫)
51單片機,所用IO腳只做輸入,只在主程序的while(1)語句前寫一次1即可,以後每次讀io時就不必再寫1了。其實,單片機上電復位後,IO腳的默認狀態就是1,如果不做輸出,是不用再寫1的,當然了,多寫一次1也沒關系,不影響什麼。對於做輸入/輸出的IO腳,為了保證讀取正確,才需要在每次讀之前都應寫1。
Ⅲ 關於單片機定時器賦初值的問題
要理解這個問題需要 看單片機原理 的 定時器 章節
首先 這個問題是 選擇的 16位定時模式
定時初值=65536-50000=15536
因為MCS51單片機對定時器賦值 一次只能訪問8位(即 TH0 和 TL0分開賦值)
也就是將 15536 拆成高八位和低八位
(65536-50000)/ 256 就是求高八位 數值
(65536-5000)% 256 就是求低八位 數值
如果還有不理解之處,請繼續提問!