永发信息网

单片机: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();}}//主函数

全部回答
  • 1楼网友:独行浪子会拥风
  • 2021-11-25 00:04
要Proteus仿真吗
我做单片机设计的
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯