freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

c語言單片機(jī)實例(編輯修改稿)

2025-02-03 11:40 本頁面
 

【文章內(nèi)容簡介】 源 中斷觸發(fā)原因 中斷號 INT0 外部 INT0 引腳有低電平或下降沿信號輸入 0 Timer0 Timer0 計數(shù)溢出 1 INT1 外部 INT0 引腳有低電平或下降沿信號輸入 2 Timer1 Timer1 計數(shù)溢出 3 串行中斷 串口緩存 SBUF 寫入數(shù)據(jù)或讀出數(shù)據(jù) 4 可 以用作計數(shù),也可以用來定時,由由 TMOD 寄存器中 TC/ 為決定,作為計數(shù)器使用時,接受單片機(jī)外部引腳 輸入的脈沖加計數(shù);作為定時器使用時,接受單片機(jī)內(nèi)部的機(jī)器周期脈沖。如果單片機(jī)的振蕩頻率為 f ,振蕩周期為 ft 1? ,則機(jī)器周期為fT 12? 。本案例中 12?f MHz,則 1?T 微秒, timer0 工作在模式 1 為 16 為加計數(shù)器,當(dāng)計數(shù)器初始值為 0xee11 時,則從開始計數(shù)到產(chǎn)生中斷需要的時間為 0xffff — 0xee11 個微秒,剛好為 5000 微秒,也即 5 毫秒。本案例 timer0 的初裝也可以利用下面語句完成: /**********************************/ defined TEMOR0_COUNT 0xee11 TL0 = TEMOR0_COUNT amp。 0x00ff。 //取 TEMOR0_COUNT 的低字節(jié)并裝入 TL0 TH0 = TEMOR0_COUNT 8。 // TEMOR0_COUNT 左移 8 位,并將低字節(jié)裝入 TEMOR0_COUNT /**********************************/ 利用定時器 /計數(shù)器定時時,需要現(xiàn)設(shè)置工作模式,并計算它的初裝值,計算初裝值不好計算,常利用 計算機(jī)中的計算器工具輔助。 timer0 工作在模式 1 可以最大 65535 微秒中斷 1次,如工作模式 2,最大 256 微秒中斷 1 次。 ,可以不對中斷的優(yōu)先級進(jìn)行設(shè)置,因此在本案例中語句PT0 = 1 可以省略。程序中有多個中斷但沒有進(jìn)行優(yōu)先級設(shè)定的情況下,單片機(jī)中斷優(yōu)先級默認(rèn)按終端號遞增而依次降低。 timer0 中斷服務(wù)函數(shù)里面,由于 5毫秒中斷 1次,因此數(shù)碼管顯示的數(shù)據(jù)會每 5毫秒更新 1次。 1秒內(nèi)更新 200次,更新過程是把原來的數(shù)據(jù)覆蓋,但顯示數(shù)據(jù) 1秒內(nèi)變化 1次。 利用 4 個數(shù)碼管,實現(xiàn)秒信號加計數(shù) 一、電路原理 圖 321 所示的電路中, 4 位七段數(shù)碼管采用 4 只單個數(shù)碼管組成,可以顯示 0000~9999,數(shù)據(jù)輸入端并聯(lián)后接 P0 口,位選即每個數(shù)碼管的陽極分別接 P2 口,中間加非門驅(qū)動。因為 P2 口反相驅(qū)動,因此,如果千位數(shù)碼管顯示, 輸出低電平, P2 的其它端口輸出高電平,并且此時 P0 輸出千位數(shù)據(jù)。在利用 Proteuse 軟件仿真時,數(shù)碼管 SEVEN_SEG 使用7SEGMPX4CA,非門 NOT 選用 74 HC series 類型中 Gates amp。 Inverters 分類 下的 74HC04。電阻 R2~9 是限流電阻。 P 1 . 0P 1 . 1P 1 . 2P 1 . 3P 1 . 4P 1 . 5P 1 . 62345678P 0 . 0 / A D 0P 0 . 1 / A D 1P 0 . 2 / A D 2P 0 . 3 / A D 3P 0 . 4 / A D 4P 0 . 5 / A D 5P 0 . 6 / A D 6P 0 . 7 / A D 7P 2 . 7 / A 1 5P 2 . 6 / A 1 4P 2 . 5 / A 1 3P 2 . 4 / A 1 2P 2 . 3 / A 1 1P 2 . 2 / A 1 0P 2 . 1 / A 9P 2 . 0 / A 8R E S E TX T A L 2X T A L 1E AA L EP S E N3 93 83 73 63 53 43 33 23 13 02 92 82 72 62 52 42 32 22 1P 3 . 0 / R X DP 3 . 1 / T X DP 3 . 2 / I N T 0P 3 . 3 / I N T 1P 3 . 4 / T 0P 3 . 5 / T 1P 3 . 6 / W RP 3 . 7 / R D1 01 11 21 31 41 51 61 7P 1 . 711 91 89C 1 3 0 PC 2 3 0 PC Y 1 2 M H zR 1 1 KC 3 1 0μ I C S T C 8 9 C 5 1V C CR 2 ~ 9 2 0 0S E V E N _ S E GN O T 1N O T 2N O T 3 N O T 4 圖 321 4 位七段數(shù)碼管顯示 二、程序設(shè)計 /*****************************************************************************/ include defined unsigned char uchar defined unsigned int uint code uchar seven_seg[10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}。 code uchar seg_scan[4] = {0xef,0xdf,0xbf,0x7f}。 //各個數(shù)碼管對應(yīng)的位選數(shù)據(jù) uchar counter[4] = {0,0,0,0}。 //個位、十位、百位和千位數(shù) uint cp,i。 void timer0_isr(void) interrupt 1 // timer0 中斷服務(wù)函數(shù) { uchar j。 TR0 = 0。 //停止計數(shù) TL0 = 0x11。 // TL0 重新預(yù)置 TH0 = 0xee。 // TH0 重新預(yù)置 TR0 = 0。 //開始計數(shù) cp++。 // timer0 中斷 1 次,變量 cp 加 1 if(cp = 200) //中斷 200 次,時間剛好為 1 秒 { cp = 0。 counter[0]++。 //個位數(shù), 1 秒加 1 } if(counter[0] == 10) {counter[0]= 0。 counter[1]++。} if(counter[1] == 10) {counter[1]= 0。 counter[2]++。} if(counter[2] == 10) {counter[2]= 0。 counter[3]++。} if(counter[3] == 10) counter[3]= 0。 P0 = seven_seg[counter[j]]。 // P0 輸出數(shù)據(jù)編碼 P2 = seg_scan[j]。 //P2 輸出位選信號 j++。 if(j == 4) j = 0。 } void timer0_initialize(void) // timer0 中斷初始化函數(shù) { EA = 0。 TMOD = 0x01; TR0 = 0。 TL0 = 0x11。 TH0 = 0xee。 PT0 = 1。 ET0 = 1。 EA = 1。 TR0 = 1。 } void main (void) { timer0_initialize() while (1)。 } /*****************************************************************************/ 三、程序說明 1. imer0 第 1 次中斷, j = 0,顯示個位,顯示 5 毫秒后, timer0 第 2 次中斷, j = 1,顯示十位,以后隨著中斷依次顯示百位和千位,最后重新顯示個位。每位顯示停留的時間為 5 毫秒。中斷 4 次才能讓 4 為依次掃描顯示完,占用的時間為 20 毫秒, 1 秒鐘內(nèi), 4 位數(shù)碼管掃描顯示 50 遍,根據(jù)人眼視覺暫留特點,你看到的結(jié)果是 4 位數(shù)據(jù)同時顯示,這種顯示方法為動態(tài)掃描顯示。 2.變量 j = 0 時, counter[0]是個位十進(jìn)制數(shù),執(zhí)行 P0 = seven_seg[counter[0]], P0 口輸出個位顯示數(shù)據(jù)編碼;數(shù)碼管的位選信號只利用了 P2 的高 4 位,執(zhí)行 P2 = seg_scan[0], P2 = 0xef,經(jīng)過非門反相,加在數(shù)碼管上的位選信號只有個位是高電平,此時只顯示個位。 3.?dāng)?shù)組 counter[j]也可以用 1 個變量代替,在顯示時需做下面處理 /********************/ uint x; … P0 = seven_seg[x/1000]。 // P0 輸出千位數(shù)據(jù)編碼 P2 = seg_scan[3]。 //千位數(shù)碼管共陽極設(shè)置為高電平 P0 = seven_seg[x%1000/100]。 // P0 輸出百位數(shù)據(jù)編碼 P2 = seg_scan[2]。 //千位數(shù)碼管共陽極設(shè)置為高電平 P0 = seven_seg[x%1000%100/10]。 // P0 輸出十位數(shù)據(jù)編碼 P2 = seg_scan[1]。 //千位數(shù)碼管共陽極設(shè)置為高電平 P0 = seven_seg[x%1000%100%10]。 // P0 輸出千位數(shù)據(jù)編碼 P2 = seg_scan[0]。 //千位數(shù)碼管共陽極設(shè)置為高電平 … /********************/ 4.思考題 ( 1)要讓數(shù)碼管在電路加電開始就顯示 1230,怎樣更改有關(guān)數(shù)據(jù)? ( 2)為什么不用 P2 口直接驅(qū)動數(shù)碼管? ( 3)本案例如果 200 微秒中斷 1 次,也可以實現(xiàn) 1 定時,顯示結(jié)果會怎樣? 設(shè)計一個 6 位數(shù)碼管時間顯示程序 本案例使用 6 位數(shù)碼管顯示時間,能顯示時 /分 /秒,顯示格式是 到 。其中小時和分鐘之間的小數(shù)點常亮,分鐘和秒之間的小數(shù)點進(jìn)行秒閃爍。 一、 參考電路 二、 參考程序 /*****************************************************************************/ include defined unsigned char uchar code uchar seven_seg[10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}。 code uchar seg_scan[6] = {0xfb,0xf7,0xef,0xdf,0bf,0x7f}。 //各個數(shù)碼管對應(yīng)的位選數(shù)據(jù) uchar counter[3] = {0,0,0}。 //時位、分位和秒位 uchar tick,cp,i,j。 //tick:秒信號, cp:中 斷次數(shù)累計 void dispaly(void) { uchar d; d = d * tick。 //d 的值 1 秒內(nèi)改變 1 次,要么 0x00,要么 0xff d = d | 0x7f。 //d 的值 1 秒內(nèi)改變 1 次,要么 0x7f, 要么 0xff swich(i) { case 0 : P0 = seven_seg[counter[0]%10]。 break。 //顯示秒個位 case 1 : P0 = seven_seg[counter[0]/10]。 break。 //顯示秒十位 case 2 : P0 = d amp。 seven_seg[counter[0]%10]。 break。 //數(shù)據(jù)高 8 位 1 秒改變 1 次,實現(xiàn)小 //數(shù)點秒閃爍 case 3 : P0 = seven_seg[co
點擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1