|
名稱:按鍵調(diào)節(jié)數(shù)碼管顯示
功能:通過(guò)按鍵加減數(shù)碼管所顯示的數(shù)字
按下k1加1,最大加到9999
按下k2減1,最小減到0
按下k3清零復(fù)位
用了最簡(jiǎn)單的思路,各路大神不喜勿噴.
小弟就不和各位爺繞彎子了,直接上圖
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
單片機(jī)源程序如下:
- //----------------------------------------------------------------------
- //名稱:按鍵調(diào)節(jié)數(shù)碼管顯示
- //----------------------------------------------------------------------
- //功能:通過(guò)按鍵加減數(shù)碼管所顯示的數(shù)字
- // 按下k1加1,最大加到9999
- // 按下k2減1,最小減到0
- // 按下k3清零復(fù)位
- //----------------------------------------------------------------------
- //姓名:陳潤(rùn)源
- //地點(diǎn):內(nèi)江職業(yè)技術(shù)學(xué)院
- //時(shí)間: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; //復(fù)位
- 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的值決定開(kāi)機(jī)顯示數(shù)值
- //****************************************
- //延時(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]; //顯示個(gè)位
- 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) //檢測(cè)按鍵是否被按下
- { //延時(shí)消抖
- delayms(10);
- if(k1==0) //再次檢測(cè)是否真正按下按鍵
- {
- m++; //m自加一
- if(m>=100) //如果m加到100則n加一 (限制m的取值范圍) 個(gè)位、十位最大顯示99
- {
- n++; //n自加一
- m=0; //使m又從0開(kāi)始計(jì)數(shù)
- if(n>=100) //如果n加到100則m=n=99 (限制n的取值范圍) 百位、千位最大顯示99
- {
- m=99; //最大顯示9999
- n=99;
- }
- }
- }
- while(!k1); //按鍵松開(kāi)
- }
- if(k2==0) //檢測(cè)按鍵是否被按下
- { //延時(shí)消抖
- delayms(10); //再次檢測(cè)是否真正按下按鍵
- if(k2==0)
- { //m自減一
- m--;
- if(m<=0) //如果m減到0則n減一 (限制n的取值范圍) 個(gè)位、十位最小顯示00
- {
- m=99; //重新給m裝初值
- n--; //n自減一
- if(n==-1) //如果n減到-1,則m=n=0 (限制n的取值范圍) 百位、千位最小顯示00
- {
- n=0; //最小顯示0000
- m=0;
- }
- }
- }
- while(!k2); //按鍵松開(kāi)
- }
- if(k3==0) //檢測(cè)按鍵是否被按下
- {
- delayms(10); //延時(shí)消抖
- if(k3==0) //再次檢測(cè)是否真正按下按鍵
- {
- m=0; //復(fù)位,顯示0000
- n=0;
- }
- while(!k3); //按鍵松開(kāi)
- }
- }
- void main()
- {
- while(1)
- { //調(diào)用按鍵檢測(cè)
- key(); //數(shù)碼管顯示
- display();
- }
- }
復(fù)制代碼
所有資料51hei提供下載:
0~9999計(jì)數(shù)器.zip
(53.03 KB, 下載次數(shù): 375)
2019-4-15 08:33 上傳
點(diǎn)擊文件名下載附件
|
評(píng)分
-
查看全部評(píng)分
|