【 】:74c922就要把輸入進來的BCD轉成10進制
【 】: 然後丟到一個變數裡面 一秒鐘中斷就減一次
kller: 恩
【 】: 一秒中斷裡面我寫 那個計時變數減一 然後判斷是否為零 如果是0就切換到輸出陣列的下一個值
【 】: 不用74c922就跟上學期期末一樣而已 用掃描碼
kller: 恩
【 】: 除了需要一個一秒中斷 還需要一個四位元顯示用的中斷
【 】: 每個位元至少30hz的話 四位元輪流跳一次至少要120hz
【 】: 大概是8ms
kller: 那段我想說照課本的應該就可以了
【 】: 嗯
【 】: 是因為我看到課本那個範例沒放74c922 程式碼又可以合併
【 】: 加上學長要我不裝 我就乾脆不裝了
【 】: 方便
kller: 但是我想說像你那樣要設定兩邊的時間
kller: 那邊要怎麼寫
【 】: 就輸入四個碼
【 】: 分別放到A變數的十位數 A變數的個位數 B變數的十位數 B變數的個位數
【 】: 然後我把輸入之後的A變數 再設定一個A' 變數 設定用
【 】: 然後把B變數同時也設定成 B'
【 】: 每秒在減就是減A跟B
【 】: 例如當A變成零後 就把A=B' B=(B'+5)
【 】: 這樣
【 】: 然後等到B變成零 就把A=A' B=(A'+5)
【 】:74c922很聰明 你一按他就會有值進入CPU
【 】: 接著把他的BCD碼 用那個if(d==1).....換成十進位 變成一個變數
【 】: 然後因為你是按四次 每次都要丟到一個disp[x]去
【 】: 譬如按第一次 就disp[0]
【 】: 第二次就丟disp[1]
【 】: 輸入歸輸入 顯示是他自己的事
kller: 所以disp要重複寫兩次
【 】: 不 要四次
kller: 寫到disp[3]
【 】: A十位 A個位 B十位 B個位
kller: 你是把這段砍掉然後換成你寫的東西嗎
kller: if(++count_T0==20)
{ count_T0=0;
seconds--;
if(seconds==0)
{ seconds=0;
}
}
【 】: 沒有
【 】: 因為這段是每一秒減一次秒數
【 】: 我是加在後面判斷他是否歸零
【 】: 判斷A或B是否歸零
【 】: 所以意思就是說
【 】: 我每跳一秒有兩個變數都會減一
【 】: 減一之後當然要寫入到輸出陣列
【 】: disp[0]=TAB[Lseconds/10];
disp[1]=TAB[Lseconds%10];
disp[2]=TAB[Rseconds/10];
disp[3]=TAB[Rseconds%10];
【 】: 像這樣 我寫在中斷副程式裡面
【 】: 中斷副程式只負責 讀->減一->寫入->判斷->改變變數
【 】: 這是一秒的
【 】: 8ms的工作內容是
【 】: 輸出disp[0] 過8ms 輸出disp[1] 當然 七段四位元顯示腳要跟著換
文章標籤
全站熱搜
