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

正文內容

51單片機的基本外圍電路設計以及相關c語言程序免積分-文庫吧資料

2025-07-13 11:37本頁面
  

【正文】 cludedefine timer0_count 0xee18 define times 20sbit key = P3^0。 //按鍵按下狀態(tài)復位key1_up_state = 1。amp。程序如下;/*********************************/uchar key1_down_state, key1_up_state, //變量聲明,初始值為0……if(key1 == 0){ delay(200)if(key1 == 0)key1_down_state = 1。如果把while改換成if,按鍵只要按下數(shù)據(jù)就能調整,但如果按下不放開按鍵,數(shù)據(jù)自動快速增加或減小。 //顯示鍵盤調整數(shù)據(jù)}}/*****************************************************************************/三、程序說明1.如果按鍵按下不放開,程序一直執(zhí)行語句while(key1 == 0),這時程序在此處死循環(huán),不能執(zhí)行其它程序,所以本案例按鍵抬起后數(shù)據(jù)才能得到調整。 if(i 0) i = 9。 //數(shù)據(jù)增加超過9后,回到0}if(key2_state = 1){ i。 //顯示數(shù)據(jù)增加key1_state = 0。while(1){key_scan()。while(key2 == 0) key2_state = 1。 //延時一段時間,消除鍵抖while(key1 == 0) key1_state = 1。 //按鍵按下的狀態(tài)變量void delay(uchar i){ while(i) i。sbit key2 = 。圖 334 利用延時函數(shù)消除鍵盤抖動實現(xiàn)鍵盤輸入電路二、程序設計/*****************************************************************************/include define uchar unsigned charcode uhar seven_seg[10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}。在Proteuse軟件中,按鍵的英文名字為BUTTON,在Switches amp。一、電路原理在單片機最系統(tǒng)的基礎上,KEY,另一端接地,見圖332所示。 利用延時程序防止鍵盤抖動,實現(xiàn)鍵盤輸入按鍵按下產生的抖動現(xiàn)象持續(xù)的時間不會很久,因此在按鍵按下后,可延時一段時間跳過抖動,再對按鍵的狀態(tài)檢測,從而實現(xiàn)鍵盤輸入。如果需要多個鍵盤,把INT0口與I/O口之間用鍵盤連接,I/O輸出低電平掃面信號即可。如果設置只有下降沿才觸發(fā)INT0中斷,需要利用設置計時器控制寄存器TCON的IT0 = 1位,按鍵按下是否產生中斷,可以利用程序檢測TCON的IE0位。 //開啟總中斷開關 while(1)。 //開啟INT0中斷 PX0 = 1。 //芯片初始化時,LED滅 EA = 0。 //INT0中斷1次,LED工作狀態(tài)變化1次 delay()。 i = ~i。圖333 利用外部中斷INT0實現(xiàn)鍵盤輸入電路二、程序設計/*****************************************************************************/includesbit LED = P0^0。一、參考電路 在最小系統(tǒng)基礎上,按鍵不按時,+5V,如果按鍵按下。在數(shù)字電路中,常利用觸發(fā)器消除鍵盤抖動,但在單片機系統(tǒng)中,按鍵可以直接接在單片機的I/O口上,常利用鍵盤程序來消除鍵盤的抖動現(xiàn)象。按鍵抖動時間的長短由按鍵的機械特性決定,一般為5ms~10ms。T1為不按按鍵時刻,T2為按鍵按下瞬間的抖動,T3為按鍵按下穩(wěn)定時刻,T4為按鍵放開時刻瞬間,T5為按鍵放開時刻。原因是按鍵按下在導體接觸的瞬間產生了震動。一般認為:按鍵按下,CP端由低電平變?yōu)楦唠娖?,含有電平上升沿,計?shù)器加1計數(shù),并且按下1次,計數(shù)器加1。圖 331 加數(shù)計數(shù)小系統(tǒng) 圖 332 加數(shù)計數(shù)小系統(tǒng) 在圖331所示的一個加數(shù)計數(shù)小系統(tǒng)中,設計數(shù)器的脈沖輸入端CP為上升沿有效,加計數(shù)器初始顯示為0。如果不對鍵盤的抖動進行處理,按鍵會對系統(tǒng)電路或程序產生意外的干擾。 鍵盤抖動現(xiàn)象按鍵按下都會發(fā)出一聲響,誰然有的按鍵聲音很輕微,但這都是導體碰撞產生的震動。按鍵是計算機系統(tǒng)輸入設備,也是人機信息交換的主要途徑。,使用的變量就愈多,在程序分析和設計時,需要注意使用的變量最好使用有一定含義的字符表示。timer0每 5毫秒中斷1次,調用dispaly()函數(shù)執(zhí)行1次,在執(zhí)行dispaly()過程中,當i = 0時,只顯示秒個位,當i = 1時,只顯示秒十位,依次類推。}time。ucar min。 }void main (void){timer0_initialize() // timer0初始化,為中斷做好準備while (1)。 EA = 1。 PT0 = 1。 TL0 = 0x11。 }void timer0_initialize(void) // timer0中斷初始化函數(shù){EA = 0。}if(counter[2] == 24) counter[2]= 0。} if(counter[1] == 60) {counter[1]= 0。 //個位數(shù),1秒加1}if(counter[0] == 60) {counter[0]= 0。 }if(j == 2) //剛好1秒{j = 0。tick = ~tick。 //開始計數(shù)cp++。 // TL0重新預置TH0 = 0xee。}void timer0_isr(void) interrupt 1 // timer0中斷服務函數(shù){TR0 = 0。 i++。 //顯示時十位 } break。 //顯示數(shù)據(jù)高8位為低電平,小數(shù)點常亮case 5 : P0 = seven_seg[counter[0]/10]。 seven_seg[counter[0]%10]。 break。 break。 //顯示秒十位case 2 : P0 = d amp。 //顯示秒個位 case 1 : P0 = seven_seg[counter[0]/10]。 //d 的值1秒內改變1次,要么0x7f, 要么0xffswich(i){case 0 : P0 = seven_seg[counter[0]%10]。 //tick:秒信號,cp:中斷次數(shù)累計void dispaly(void){ uchar d; d = d * tick。 //各個數(shù)碼管對應的位選數(shù)據(jù)uchar counter[3] = {0,0,0}。一、 參考電路二、 參考程序/*****************************************************************************/includedefined unsigned char ucharcode uchar seven_seg[10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}。 //千位數(shù)碼管共陽極設置為高電平…/********************/4.思考題(1)要讓數(shù)碼管在電路加電開始就顯示1230,怎樣更改有關數(shù)據(jù)?(2)為什么不用P2口直接驅動數(shù)碼管?(3)本案例如果200微秒中斷1次,也可以實現(xiàn)1定時,顯示結果會怎樣?本案例使用6位數(shù)碼管顯示時間,能顯示時/分/秒。 //千位數(shù)碼管共陽極設置為高電平P0 = seven_seg[x%1000%100%10]。 //千位數(shù)碼管共陽極設置為高電平P0 = seven_seg[x%1000%100/10]。 //千位數(shù)碼管共陽極設置為高電平P0 = seven_seg[x%1000/100]。3.數(shù)組counter[j]也可以用1個變量代替,在顯示時需做下面處理/********************/uint x;…P0 = seven_seg[x/1000]。中斷4次才能讓4為依次掃描顯示完,占用的時間為20毫秒,1秒鐘內,4位數(shù)碼管掃描顯示50遍,根據(jù)人眼視覺暫留特點,你看到的結果是4位數(shù)據(jù)同時顯示,這種顯示方法為動態(tài)掃描顯示。 }/*****************************************************************************/三、程序說明1.imer0第1次中斷,j = 0,顯示個位,顯示5毫秒后,timer0第2次中斷,j = 1,顯示十位,以后隨著中斷依次顯示百位和千位,最后重新顯示個位。 TR0 = 1。 ET0 = 1。TH0 = 0xee。 TMOD = 0x01; TR0 = 0。if(j == 4) j = 0。 // P0輸出數(shù)據(jù)編碼P2 = seg_scan[j]。}if(counter[3] == 10) counter[3]= 0。}if(counter[2] == 10) {counter[2]= 0。} if(counter[1] == 10) {counter[1]= 0。 //個位數(shù),1秒加1}if(counter[0] == 10) {counter[0]= 0。 // timer0中斷1次,變量cp加1if(cp = 200) //中斷200次,時間剛好為1秒{cp = 0。 // TH0重新預置TR0 = 0。 //停止計數(shù)TL0 = 0x11。void timer0_isr(void) interrupt 1 // timer0中斷服務函數(shù){uchar j。 //各個數(shù)碼管對應的位選數(shù)據(jù)uchar counter[4] = {0,0,0,0}。圖321 4位七段數(shù)碼管顯示二、程序設計/*****************************************************************************/includedefined unsigned char uchardefined unsigned int uintcode uchar seven_seg[10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}。 Inverters分類下的74HC04。因為P2口反相驅動,因此,如果千位數(shù)碼管顯示,P2的其它端口輸出高電平,并且此時P0輸出千位數(shù)據(jù)。1秒內更新200次,更新過程是把原來的數(shù)據(jù)覆蓋,但顯示數(shù)據(jù)1秒內變化1次。程序中有多個中斷但沒有進行優(yōu)先級設定的情況下,單片機中斷優(yōu)先級默認按終端號遞增而依次降低。timer0工作在模式1可以最大65535微秒中斷1次,如工作模式2,最大256微秒中斷1次。 //取TEMOR0_COUNT的低字節(jié)并裝入TL0TH0 = TEMOR0_COUNT 8。本案例timer0的初裝也可以利用下面語句完成:/**********************************/defined TEMOR0_COUNT 0xee11TL0 = TEMOR0_COUNT amp。如果單片機的振蕩頻率為,振蕩周期為,則機器周期為。在使用中斷服務函數(shù)時,直接在名后加interruput和中斷號即可。 //開始計數(shù)}void main (void){timer0_initialize() // timer0初始化,為中斷做好準備while (1)。 //設置中斷允許寄存器IE中ET0的位,開啟中斷小開關EA = 1。 // Timer0的16位計數(shù)器初始值為0xee11,12MHz晶體振//頻率,單片機的機器周期為1微妙,Timer0每1微秒加1//計數(shù),加滿溢出變產生中斷,從計數(shù)到中斷剛好為5毫秒PT0 = 1。 //設置計時器控制寄存器TCON寄存器的TR0位為0,Timer0//停止計數(shù)TL0 = 0x1
點擊復制文檔內容
規(guī)章制度相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1