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