单片机仿真做按键控制数码管静态显示

0~99计数显示,并用3个开关K1,K2,K3分别实现加1,减1,清零。为什么只能加到1,不能加到99。。下面是程序#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit K1=P2^0;sbit K2=P2^1;sbit K3=P2^2;uchar code SEG_CODE[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07,0x7f,0x6f};void delay(uint t)//延时函数{ uint x,y; for(x=t;x>0;x--) for(y=110;y>0;y--);}void k1(){ uchar i=0; P0=SEG_CODE[i%10]; //个位 P1=SEG_CODE[i/10]; //十位 { while(1) { i++; if(i>99) i=0; P0=SEG_CODE[i%10]; //个位 P1=SEG_CODE[i/10]; //十位 } } while(K1==0); }void k2(){ uchar i=!0; P0=SEG_CODE[i%10]; //个位 P1=SEG_CODE[i/10]; //十位 { i--; if(i<0) i=0; P0=SEG_CODE[i%10]; //个位 P1=SEG_CODE[i/10]; //十位 } while(K2==0); } void k3(){ { P0=0x3f; P1=0x3f; } while(K3==0);}void main()//主函数{ P0=0x3f; P1=0x3f; while(1) { delay(10); if(K1==0) k1(); delay(10); if(K2==0) k2(); delay(10); if(K3==0) k3(); }}

因为你k1,k2,k3中的i都是局部变量,每次执行k1,k2,k3是都重新赋值了,把i改为全局变量,并把k1,k2,k3中的i的定义删除即可。追问

谢谢啦,大神,解决了,但是又有个问题,我K1按了加1,加到了10,然后按K3清零,接着再按K1就直接11了,不是再从0开始加。

追答

k3里加上i=0;

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-11-06
《单片机原理与接口技术》课程设计报告书 设计题目: 基于单片机的按键控制LED 数码管 共阴极动态显示电路设计 指导教师:II 专业: 自动化 班级: 学生姓名XX 学号 课程名称 ...
相似回答