名稱:按鍵調節(jié)數(shù)碼管顯示
功能:通過按鍵加減數(shù)碼管所顯示的數(shù)字
按下k1加1,最大加到9999
按下k2減1,最小減到0
按下k3清零復位
用了最簡單的思路,各路大神不喜勿噴.
小弟就不和各位爺繞彎子了,直接上圖
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
單片機源程序如下:
- //----------------------------------------------------------------------
- //名稱:按鍵調節(jié)數(shù)碼管顯示
- //----------------------------------------------------------------------
- //功能:通過按鍵加減數(shù)碼管所顯示的數(shù)字
- // 按下k1加1,最大加到9999
- // 按下k2減1,最小減到0
- // 按下k3清零復位
- //----------------------------------------------------------------------
- //姓名:陳潤源
- //地點:內(nèi)江職業(yè)技術學院
- //時間:2019年4月6日21:39:46
- //----------------------------------------------------------------------
- #include <reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit k1 = P1^0; //加
- sbit k2 = P1^1; //減
- sbit k3 = P1^2; //復位
- void key(void);
- void display(void);
- uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,
- 0x92,0x82,0xf8,0x80,0x90}; //數(shù)組
-
- char m=99,n=98; //顯示初值,m,n的值決定開機顯示數(shù)值
- //****************************************
- //延時程序
- //****************************************
- void delayms(uint xms)
- {
- uint i,j;
- for(i=xms;i>0;i--)
- for(j=110;j>0;j--);
- }
- //***********************************************
- //顯示程序
- //***********************************************
- void display(void)
- {
- P2=0X08;
- P0=table[m%10]; //顯示個位
- delayms(5);
- P2=0X04;
- P0=table[m/10]; //顯示十位
- delayms(5);
- P2=0X02;
- P0=table[n%10]; //顯示百位
- delayms(5);
- P2=0X01;
- P0=table[n/10]; //顯示千位
- delayms(5);
- }
- //***************************************************
- //按鍵處理
- //***************************************************
- void key()
- {
- if(k1==0) //檢測按鍵是否被按下
- { //延時消抖
- delayms(10);
- if(k1==0) //再次檢測是否真正按下按鍵
- {
- m++; //m自加一
- if(m>=100) //如果m加到100則n加一 (限制m的取值范圍) 個位、十位最大顯示99
- {
- n++; //n自加一
- m=0; //使m又從0開始計數(shù)
- if(n>=100) //如果n加到100則m=n=99 (限制n的取值范圍) 百位、千位最大顯示99
- {
- m=99; //最大顯示9999
- n=99;
- }
- }
- }
- while(!k1); //按鍵松開
- }
- if(k2==0) //檢測按鍵是否被按下
- { //延時消抖
- delayms(10); //再次檢測是否真正按下按鍵
- if(k2==0)
- { //m自減一
- m--;
- if(m<=0) //如果m減到0則n減一 (限制n的取值范圍) 個位、十位最小顯示00
- {
- m=99; //重新給m裝初值
- n--; //n自減一
- if(n==-1) //如果n減到-1,則m=n=0 (限制n的取值范圍) 百位、千位最小顯示00
- {
- n=0; //最小顯示0000
- m=0;
- }
- }
- }
- while(!k2); //按鍵松開
- }
- if(k3==0) //檢測按鍵是否被按下
- {
- delayms(10); //延時消抖
- if(k3==0) //再次檢測是否真正按下按鍵
- {
- m=0; //復位,顯示0000
- n=0;
- }
- while(!k3); //按鍵松開
- }
- }
- void main()
- {
- while(1)
- { //調用按鍵檢測
- key(); //數(shù)碼管顯示
- display();
- }
- }
復制代碼
所有資料51hei提供下載:
0~9999計數(shù)器.zip
(53.03 KB, 下載次數(shù): 375)
2019-4-15 08:33 上傳
點擊文件名下載附件
|