单片机:K1~K4控制数码管加减演示 流程图!!!
答案:2 悬赏:60 手机版
解决时间 2021-11-25 03:11
- 提问者网友:战皆罪
- 2021-11-24 23:00
单片机:K1~K4控制数码管加减演示 流程图!!!
最佳答案
- 五星知识达人网友:duile
- 2021-11-24 23:13
看了你的程序,真让人无语啊,一个简单的加减数程序竟然能编写成这么繁琐
首先,你的数码管编码不对,除非你是自己做的硬件电路
再有,你的按键处理部分不好,也许可以实现你的功能吧,我没有验证
玩单片机这么久了,从没见过这样进行按键处理的
别的不多说了,给你一个我自己编写的加减数程序吧
端口已经按照你的板子连线改好了,至于数码管的编码,如果不对,你再自行修改吧
如果看不懂,或任何疑问,可以随时追问,也可私密我加个好友
#include
sbit K1=P1^0; sbit K2=P1^1; sbit K3=P1^2;//按键端口定义
unsigned int count;//数码管显示用变量
char table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//数码管显示编码
void delay(char x) {char j;for(;x>0;x--){for(j=100;j>0;j--);}}//延时
void display(int xs)//四位数码管显示
{
char d1,d2,d3,d4;
d1=(xs/1)%10; d2=(xs/10)%10;
d3=(xs/100)%10; d4=(xs/1000)%10;
P0=table[d1]; P2=0x01; delay(5); P2=0x00;
P0=table[d2]; P2=0x02; delay(5); P2=0x00;
P0=table[d3]; P2=0x04; delay(5); P2=0x00;
P0=table[d4]; P2=0x08; delay(5); P2=0x00;
}
void key()//按键处理
{
if(K1==0){delay(10);if(K1==0){count++;}while(!K1){display(count);}}//加一
if(K2==0){delay(10);if(K2==0){count--;}while(!K2){display(count);}}//减一
if(K3==0){delay(10);if(K3==0){count=0;}while(!K3){display(count);}}//清零
display(count); if(count>9999){count=0;}//调用显示函数 及 防止溢出
}
void main(){count=1234; while(1){key();}}//主函数
首先,你的数码管编码不对,除非你是自己做的硬件电路
再有,你的按键处理部分不好,也许可以实现你的功能吧,我没有验证
玩单片机这么久了,从没见过这样进行按键处理的
别的不多说了,给你一个我自己编写的加减数程序吧
端口已经按照你的板子连线改好了,至于数码管的编码,如果不对,你再自行修改吧
如果看不懂,或任何疑问,可以随时追问,也可私密我加个好友
#include
sbit K1=P1^0; sbit K2=P1^1; sbit K3=P1^2;//按键端口定义
unsigned int count;//数码管显示用变量
char table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//数码管显示编码
void delay(char x) {char j;for(;x>0;x--){for(j=100;j>0;j--);}}//延时
void display(int xs)//四位数码管显示
{
char d1,d2,d3,d4;
d1=(xs/1)%10; d2=(xs/10)%10;
d3=(xs/100)%10; d4=(xs/1000)%10;
P0=table[d1]; P2=0x01; delay(5); P2=0x00;
P0=table[d2]; P2=0x02; delay(5); P2=0x00;
P0=table[d3]; P2=0x04; delay(5); P2=0x00;
P0=table[d4]; P2=0x08; delay(5); P2=0x00;
}
void key()//按键处理
{
if(K1==0){delay(10);if(K1==0){count++;}while(!K1){display(count);}}//加一
if(K2==0){delay(10);if(K2==0){count--;}while(!K2){display(count);}}//减一
if(K3==0){delay(10);if(K3==0){count=0;}while(!K3){display(count);}}//清零
display(count); if(count>9999){count=0;}//调用显示函数 及 防止溢出
}
void main(){count=1234; while(1){key();}}//主函数
全部回答
- 1楼网友:独行浪子会拥风
- 2021-11-25 00:04
要Proteus仿真吗
我做单片机设计的
我做单片机设计的
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯