按键控制四位数码管的显示值,按一次K0键数码管显示值加一,按一次K1键数码管显示值减一,数码管可以从0000~9999显示,显示9999再按K0键显示值归0000,显示0000再按K1键显示值变为9999。
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
源代码如下
- /*80c51*/
- #include <reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit key0=P3^2; //定义按键
- sbit key1=P3^3;
- // '0' '1' '2' '3' '4' '5' '6' '7' '8' '9'
- uchar code segtab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴极数码管0-9显示码
- char m = 0, n = 0;
- void KeyScan(void); //调用函数声明
- void Delay(uint cnt);
- /******************************************************************/
- /* 显示处理函数 */
- /******************************************************************/
- void Display(void)
- {
- P2 = 0x01;
- P1 = segtab[m%10];
- Delay(5); //个位显示
- P2 = 0x08;
- P1 = segtab[m/10];
- Delay(5); //十位显示
-
- P2 = 0x04;
- P1 = segtab[n%10];
- Delay(5); //百位显示
-
- P2 = 0x02;
- P1 = segtab[n/10];
- Delay(5); //千位显示
-
- }
- /**********************************************************
- 主程序
- ***********************************************************/
- void main(void)
- {
- while(1)
- {
- KeyScan();
-
- Display();
- }
-
- }
- /****************************************************
- 按键程序
- *****************************************************/
- void KeyScan(void)
- {
- if(key0 == 0)
- {
- Delay(10); //按键去抖动
- if(key0 == 0)
- {
- m++;
- if(m>=100)
- {
- n++;
- m=0;
- if(n>=100)
- {
- m=0;
- n=0;
- }
- }
- }
- while(!key0);
- }
-
- if(key1 == 0)
- {
- Delay(10); //按键去抖动
- if(key1 == 0)
- {
- m--;
- if(m<0)
- {
- m=99;
- n--;
- if(n<0)
- {
- m=99;
- n=99;
- }
- }
- }
- while(!key1);
- }
-
- }
- /************************************************
- 延时程序
- *************************************************/
- void Delay(uint xms)
- {
- uint i,j;
- for(i=xms;i>0;i--)
- for(j=110;j>0;j--);
- }
复制代码
数码管显示.zip
(40.35 KB, 下载次数: 61)
|