名称:按键调节数码管显示
功能:通过按键加减数码管所显示的数字
按下k1加1,最大加到9999
按下k2减1,最小减到0
按下k3清零复位
用了最简单的思路,各路大神不喜勿喷.
小弟就不和各位爷绕弯子了,直接上图
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
- //----------------------------------------------------------------------
- //名称:按键调节数码管显示
- //----------------------------------------------------------------------
- //功能:通过按键加减数码管所显示的数字
- // 按下k1加1,最大加到9999
- // 按下k2减1,最小减到0
- // 按下k3清零复位
- //----------------------------------------------------------------------
- //姓名:陈润源
- //地点:内江职业技术学院
- //时间: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}; //数组
-
- char m=99,n=98; //显示初值,m,n的值决定开机显示数值
- //****************************************
- //延时程序
- //****************************************
- 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开始计数
- 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(); //数码管显示
- display();
- }
- }
复制代码
所有资料51hei提供下载:
0~9999计数器.zip
(53.03 KB, 下载次数: 375)
|