51单片机怎么用按键控两个数码管,按一下改变两个数字的显示速度,速

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-07-29
51单片机怎么用按键控制一个数码管,按一下显示一个数字,顺序显示

1、首先,要把代码写好,点亮数码管。

2、代码写完后,要确认原先写好的代码是不是正确的。

3、确认代码无误后,进入下一步,就是在这一行代码(箭头所指)的地方,将这四个字删去。

4、然后如图所示,四个字已经删去,只要改成数字相应的代码即可。

5、这里改成的是代表数字0的代码,如图所示。

6、最后写好代码后,将生成的hex文件写进单片机,数码管显示的数字就变成0了。

给你个思路,在while循环里要实时刷新数码管显示,按键的判断放在定时器里,设一个变量,当按键按下时累加定时器中断次数,然后在主函数里判断变量值,超过一定数量则判断为按下,这时数码管计数变量++,当然你还要设按键抬起标志,仔细思考一下,肯定能写出来

#include<reg51.h>
#define uchar unsigned char;
uchar distab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; //0到f
uchar number,dat,dattop=10,cnt=0;
sbit keyu=P1^0;
sbit keyd=P1^1;
void t0isr() interrupt 1
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
number++;
if(number>1)number=0;
switch(number)
{
case 0:P2=0x02;P0=distab[dat/10];
break;
case 1:P2=0x01;P0=distab[dat%10];
break;
default:break;
}
}
void t1isr() interrupt 3
{
TH1=(65536-10000)/256;
TL1=(65536-10000)%256;
cnt++;
if(cnt>=dattop)
{
cnt=0;
dat++;
dat%=100;
}
}
main()
{
TMOD=0x11;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
TH1=(65536-10000)/256;
TL1=(65536-10000)%256;
TR1=1;
ET1=1;
TR0=1;
ET0=1;
EA=1;
while(1)
{
if(keyu==0)
{
while(keyu==0);
if(dattop<100)dattop++;
}
if(keyd==0)
{
while(keyd==0);
if(dattop>0)dattop--;
}
}
}

这个简单,私聊教你,不收费,

903605094

有偿

  • 求51单片机控制2个数码管的程序
    答:两只数码管段码分别由P0,P2输出控制,P0是十位,P2是个位。P3.2,P3.4分别接两只按键,P32.清0,P3.4计数。以上程序来自《单片机C语言程序设计实训100例——基于8051+Proteus仿真》include <reg52.h> define uchar unsigned char define uint unsigned int uchar DSY_CODE[]= { 0x3f,0x06,0x...
  • c51单片机怎么用两个按键控制两个数码管的加减,加到99就好,求程序
    答:1、首先先在proteus画出仿真图,方便仿真程序。2、接着来编写程序,先来写入头函数。2、根据自己在proteus画的图,定义一下管脚根据你的原理图进行编写。3、然后写一个延时函数,来调节流水灯的时间间隔延时时间自己定义。4、下图就是主函数,包括流水灯的反复循环和j流水灯的方向。5、检查没有错误,...
  • keil 用c51如何编写按键通过74hc164控制两个共阳极数码管
    答:要用74hc164控制两个共阳极数码管,应该用单片机的串口,并用方式0,74HC164的A、B端接P3.0,CLK端接P3.1。四个按键接法错误,是不能识别按键的,应该按下图这接地,不要用二极管。左上角的四个LED是不会亮,也要用下图这种LED,仿真时才会亮。4个LED和4个按键不能与数码管的段控端abcdefg共用。
  • 51单片机怎么用一个按键控两个数码管,按一下改变两个数字的显示速度_百 ...
    答:include<reg51.h> define uchar unsigned char;uchar distab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; //0到f uchar number,dat,dattop=10,cnt=0;sbit keyu=P1^0;sbit keyd=P1^1;void t0isr() interrupt 1 { TH0...
  • 51单片机怎么用按键控两个数码管,按一下改变两个数字的显示速度,速
    答:uchar number,dat,dattop=10,cnt=0;sbit keyu=P1^0;sbit keyd=P1^1;void t0isr() interrupt 1 { TH0=(65536-5000)/256;TL0=(65536-5000)%256;number++;if(number>1)number=0;switch(number){ case 0:P2=0x02;P0=distab[dat/10];break;case 1:P2=0x01;P0=distab[dat%10];break...
  • AT89c51单片机程序控制两个数码管显示00-59秒表的程序要怎么编啊?
    答:display(second)子函数与两个数码管的连接方式有关 void main(void )//主程序 { TMOD=0x01;// 定时器1工作方式一 ET0=1;EA=1;TH0=(65536-10000)/256;//定时10ms TL0=(65536-10000)%256;TR0=0;//上电先不启动 while(1){ if(key1==0)//判断按键是否按下 { Delay1ms(10);//延时...
  • 使用51单片机实现,两位数码管实现秒计时,显示秒,能用独立按键控制开始...
    答:暂停CLR TR0CLR ET0SJMP LOOPLOOP3:DEC AJNZ LOOP ;清零MOV 36H,#0MOV 35H,#0MOV 34H,#0MOV 33H,#0SJMP LOOPEXTINT0:PUSH ACCINC KEYVALMOV A,KEYVALCJNE A,#3,EXT00EXT00:JC EXT01MOV KEYVAL,#0EXT01:POP ACCRETIT0ISR:PUSH ACCCLR TR0MOV TH0,#3CHMOV TL0,#0B0HSETB TR0...
  • 89c51单片机两个数码管同时工作怎么弄
    答:89c51单片机两个以上数码管同时工作,一般采用扫描显示方式,如果加上按键(矩阵扫描按键)就是如下面的仿真图,可以作为参考,有参考代码如下。include<reg51.h> define uchar unsigned char uchar temp;int key1,key,disbuf;// 此表为 LED 的字模 0 1 2 3 4 5 6 7 8 9 a b c d e f u...
  • 用AT89C51单片机编写一个C语言程序实现2个数码管秒计数器,用4个按键...
    答:include<reg51.h> define uchar unsigned char;uchar LED1,LED2;uchar distab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};uchar num=0;sec,key;void delay(unsigned int a){ unsigned int i,j;for(i=0;i<a;i++)for(j=0;j<120;j++);} void display(){ LED1...
  • 两位数码管连在51单片机上,按键后数码管加1,按一下加1.怎样用汇编语言...
    答:可以将按键设置在外部中断上,中断中对应寄存器加一,即可