一个独立按键控制数码管动态显示程序亮灭c语言

求:一个独立按键控制数码管动态显示程序亮灭c语言,按下松开数码管就显示动态0~9999,再按下就关不显示了

第1个回答  推荐于2017-12-16
有点类似,你看看吧:
#include<reg52.h>
#include<intrins.h> //反转法控制按键
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
uchar a,b,c,d,keya,keyb;
uint e;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delay(uint x) //延时
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
void shumaguan(uchar a) //数码管
{
wela=1;
P0=0xc0;
wela=0;
dula=1;
P0=table[a]; //a在键盘函数引用
dula=0;
delay(10);
}
void liushuideng() //流水灯
{
b=0xc9;
while(e>=0&&e<=80)
{
P1=b;
delay(50);
b=_crol_(b,1);
e++;
if(e==80)
b=0xff;
}
}
uchar key() //有返回值的按键函数
{
P3=0x0f; //定行
P3=P3&0x0f; //判断哪一行有被按下的键
if(P3!=0x0f)
{
delay(10);
P3=0x0f;
P3=P3&0x0f;
if(P3!=0x0f)
{
c=P3&0x0f;
P3=0xf0;
d=P3&0xf0; //判断列 ,行反转
return(c+d);
}
}
return 0xff;
}
void main()
{
while(1)
{
keyb=key();
switch(keyb)
{
case 0xee:keya=0;while(key()!=0xff);shumaguan(keya);break; //判断按键
case 0xed:keya=1;while(key()!=0xff);shumaguan(keya);break;
case 0xeb:keya=2;while(key()!=0xff);shumaguan(keya);break;
case 0xe7:keya=3;while(key()!=0xff);shumaguan(keya);break;
case 0xde:keya=4;while(key()!=0xff);shumaguan(keya);break;
case 0xdd:keya=5;while(key()!=0xff);shumaguan(keya);break;
case 0xdb:keya=6;while(key()!=0xff);shumaguan(keya);break;
case 0xd7:keya=7;while(key()!=0xff);shumaguan(keya);break;
case 0xbe:keya=8;while(key()!=0xff);shumaguan(keya);break;
case 0xbd:keya=9;while(key()!=0xff);shumaguan(keya);break;
case 0xbb:keya=10;while(key()!=0xff);shumaguan(keya);break;
case 0xb7:keya=11;while(key()!=0xff);shumaguan(keya);break;
case 0x7e:keya=12;while(key()!=0xff);shumaguan(keya);break;
case 0x7d:keya=13;while(key()!=0xff);shumaguan(keya);break;
case 0x7b:keya=14;while(key()!=0xff);shumaguan(keya);break;
case 0x77:keya=15;while(key()!=0xff);shumaguan(keya);delay(1000);liushuideng();e=0;break;
default:break;
}
}
}本回答被网友采纳

一个按键怎么控制数码管显示不同的字符
这个要加程序的,按一下按键,程序中变量自加1,然后根据程序变量的值,显示相应的字符。例如:1 MP3 2 CD 3 DVD,如果当前变量值为3,下一次按键有效时,应直接赋值为1,这样就形成了循环

C语言中单按键控制流水灯亮灭
1、打开电脑,选择我的电脑,点击属性、系统属性、硬件,根据电脑系统操作。2、点击硬件之后选择设备管理器,点击进入。3、将鼠标拖至最下方,找到显示卡选项,看若显示卡条目下的名称出现问号或叹号,右键属性,看设备是否正常运行,若不正常运行,则尝试更新驱动。4、更新驱动如果不成功,则需要通过网络下...

C语言中单按键控制流水灯亮灭
enum{ 按着,松开,};std::vector<int> light,把你的灯仿佛light 然后判断当前的状况,每次触发按着的时候就让 light当前的状态变成关灯,light的下一个灯变成开起

单片机c语言呢编程问题:我要实现用一个按键控制一个LED的亮灭,按一次...
你没有松手监测呀!就是在按键处理程序后要加一个while(k1!=0);就是只有你松开按键后才认为本次按键执行完毕,不然就会一直重复执行按键按下的程序,那么你的d1一直就会执行亮灭操作!

...0~59秒计数器;1个独立按键控制,2个数码管显示
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void delay(uint ms){ uchar t;while(ms--)for(t=0;t<123;t++);} void main(){ num=0;aa=0;TMOD=0x01;TH0=(65536-50000)\/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;P0=table[0];P2=table[0];while(1){ while(!

51单片机的按键控制小灯亮灭的问题(程序类型:c语言)
void main(void){ LED = 1; \/\/初始化LED熄灭 KEY1 = 1; \/\/赋值KEY1高电平 while(1){ if(!KEY1) \/\/检测到按键按下 { LED = ~LED; \/*LED取反,此时LED = 0,灯亮。当松手时,KEY1 = 1,不满足if语句不 进入循环,LED继续保持当前状态即LED = 0,如果再次按下按键,此...

stm32用一个按键控制两位数码管从00-99,代码怎么写
\/按键控制加、减显示00-99(P1接8个独立按键,P10按下为加,P11按下为减,P2 接LED数码管的A- -H并加一个560欧的上拉排阻,P0接数码管DS1- -DS8位选)\/\/ 按键控制加、减显示00-99(P1接8个独立按键,P10按下为加,P11按下为减,P2 接LED数码管的A- -H并加一个560欧的上拉排阻,P0接...

...独立式按键)按下一次,让液晶第一位显示的数码加1,显示范围0~9?_百 ...
\/\/数码管显示 \/\/ 显示方式为动态扫描,视觉暂留原理 void Display( uchar Num ) \/\/ *p指向Main函数中的数组ShowNum的首地址 { P0 = DataChar[ Num ]; \/\/ 向P0赋段码值 DelayNms(2); \/\/ 短暂的延时 P0 = 0x00; \/\/ 让数码管熄灭,否则会造成数字重叠 } void main( void ){ while...

修改单片机C语言程序:0~59秒计数器;1个独立按键控制,第一次按按键,实现...
EA = 1;P0 = table[0];P2 = table[0];while(1) { if(!KEY) { delay(10);if(!KEY) { while (!KEY);flag++;if(flag == 1) TR0 = 0;if(flag == 2) { P0 = table[0];P2 = table[0];flag = 0;aa = 0;num = 0;TR0 = 1;} } } } } void timer0() ...

51单片机如何用一个按键控制一段程序的运行与停止
2、按键S1的输入设置为P3^2,LED的控制输出则连接到P1^5,以便通过按键操作来控制LED的亮灭。)。然后,进入主函数的编写,这是程序的核心部分(3、在C语言中,设计并实现主函数,用于程序的流程控制。)。通常,我们会用一个无限循环(4、使用while(1) {}结构创建循环,以实现程序的持续运行。)...

相似回答