|
這個(gè)是用定時(shí)器實(shí)現(xiàn)動(dòng)態(tài)數(shù)碼管顯示,如果有按鍵按下,數(shù)碼管數(shù)字加一。現(xiàn)在我在readkey()函數(shù)多加了一個(gè)if語(yǔ)句,如果另一個(gè)按鍵按下會(huì)數(shù)字減一。但是,放進(jìn)去后,只能加一次1,或者減一次1了。
下面是整個(gè)程序,請(qǐng)大家指點(diǎn)!感激不盡!
- #include <reg51.h>
- #include <intrins.h>
- sbit key = P3^2; //P3為按鍵接口
- sbit key1 = P3^3; //P3為按鍵接口
- int display_case=0;
- unsigned char n=0,n1=0;
- float digital=12.26; //定義數(shù)字為12.26
- int a,b,c,d,e,f,g;
- unsigned char table[] ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0X7F};//共陽(yáng)數(shù)碼管顯示
- unsigned char table1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//流水燈0-7
-
- void readkey(void) //按鍵按下判斷函數(shù)
- {
- void Delay100ms(int t);
-
- if(key==1)
- {
- Delay100ms(2); //消抖0.2秒
- if(key==1)
- while(key); //等待按鍵釋放
- digital--; //數(shù)字+1
- }
- if(key1==1)
- {
- Delay100ms(2); //消抖0.2秒
- if(key1==1)
- while(key1); //等待按鍵釋放
- digital++; //數(shù)字-1
- }
- }
- void yima() //獲得數(shù)字各個(gè)位數(shù)
- {
- a=digital*100;
- b=a/1000; //千位
- c=a-b*1000; //獲得,百、十、個(gè)位
- d=c/100; //取出百位
- e=c-d*100; //獲得,十、個(gè)位
- f=e/10; //取出十位
- g=e-f*10; //取出個(gè)位
- }
- void display() //數(shù)碼管顯示函數(shù)
- {
- yima(); //獲得數(shù)字各個(gè)位數(shù)
-
-
- display_case++; //輪流顯示四位數(shù)字
- if(display_case>4)
- display_case=0;
- switch (display_case)//輪流顯示四位數(shù)字
- {
- case (0):
- P2=0xfe; //顯示千位
- P0=table[b];
- break;
- case(1):
- P2=0xfd; //顯示百位
- P0=table[d];
- break;
-
- case(2):
- P2=0xfd; //顯示小數(shù)點(diǎn)
- P0=table[10];
- break;
-
- case(3):
- P2=0xfb; //顯示十位
- P0=table[f];
- break;
-
- case(4):
- P2=0xf7; //顯示個(gè)位
- P0=table[g];
- break;
- }
- }
- void timer_init()
- {
- TMOD |= 0x01; //定時(shí)器工作方式1,啟用T0定時(shí)器, GATE位為0,用TCON的TR0控制T0定時(shí)器的啟動(dòng)
- //設(shè)置定時(shí)器的初始計(jì)數(shù)值
- //計(jì)算方法
- //假設(shè)定時(shí)器為1ms,一個(gè)機(jī)器周期為 1/單片機(jī)的晶振頻率 即: 1/12M = 1us
- //而1個(gè)機(jī)器周期 = 12個(gè)時(shí)鐘周期 所以: n x 機(jī)器周期 = 1ms ===> n x 1us = 1ms
- //所以n = 1000,也就是經(jīng)過(guò)1000個(gè)機(jī)器周期,定時(shí)器要溢出(從0開始計(jì)數(shù))
- //所以定時(shí)器的初始值為65535 - 1000 + 1 = 64536 ===> 0xFC18
- TH0 = 0xFC;
- TL0 = 0x18;
- EA = 1; //總中斷開關(guān)
- ET0 = 1; //T0中斷
- TR0 = 1;//啟動(dòng)T0定時(shí)器
- }
- void trigger_timer0() interrupt 1
- {
- TH0 = 0xFC;
- TL0 = 0x18;
- //if(ii>10)
- //{ ii=0;
- display(); //動(dòng)態(tài)顯示數(shù)字
- }
- //}
- void main (void)
- {
- timer_init();// 定時(shí)器初始化
- while(1)
- {
- readkey(); //按鍵按下判斷函數(shù)
-
- }
- }
復(fù)制代碼
|
-
-
數(shù)碼管顯示.zip
2021-2-10 18:39 上傳
點(diǎn)擊文件名下載附件
1.38 KB, 下載次數(shù): 2
|