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

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-07-29
51单片机用按键控制数码管显示时钟(6位数码管,4个按键)两个按键控制加减数字,一个控制秒时分

一看这种题,不是作业就是考试,即使有人帮你写完了,一般都是看都完就闪人了,一点好处都 没有......

很简单
比如你定义的数是AA,
汇编的是这样写的:
MAIN;JB P3.0 ,S1
MOV A, AA
INC A
MOV AA,A
S1:JB P3.1 ,MAIN
MOV A, AA
DEC A
MOV AA,A
JMP MAIN
C语言的
if(P3^0==0){
delay(50);
if(P3^0==1){
aa++;
if(aa>=10)aa=0;
}}
if(P3^1==0){
delay(50);
if(P3^1==0){
aa++;
if(aa<=0)aa=9;
}}

#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--;
}
}
}

  • 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...
  • 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...
  • 使用51单片机实现,两位数码管实现秒计时,显示秒,能用独立按键控制开始...
    答:#4,T1ENDMOV SCANLED,#0T1END:POP ACCRETILEDTAB: DB 0FCH ;"0" 00HDB 60H ;"1" 01HDB 0DAH ;"2" 02HDB 0F2H ;"3" 03HDB 66H ;"4" 04HDB 0B6H ;"5" 05HDB 0BEH ;"6" 06HDB 0E0H ;"7" 07HDB 0FEH ;
  • AT89c51单片机程序控制两个数码管显示00-59秒表的程序要怎么编啊?
    答: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);//延时消抖 if(key1==0){ while(key1==0);//等待...
  • 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...
  • ...单片机键盘输入任意一个8位的数字,然后在两个数码管(加起来)上显示...
    答:break; default:break; } LED1=(r_dat/1000)%10; LED2=(r_dat/100)%10; LED3=(r_dat/10)%10; LED4=r_dat%10;}uchar kbscan(void){ unsigned char sccode,recode; P3=0x0f; //发0扫描,列线输入 if ((P3 & 0x0f) != 0x0f) //有键按下 { delay(20); //延时...
  • 怎么让单片机独立按键1个键位显示两个数码管
    答:你把显示1,2的程序放在按键识别过程中,只能是在按键的时候才显示,一旦松开按键就停在显示2了。就算是这个目的,你的程序也要修改才行,否则,就是你说的现象。把源程序发上来,帮你改,这截图没法改,不能照截图现敲代码吧。
  • 51单片机中怎样用P1口控制两个LED数码显示器同时显示不同的数,是不是...
    答:因为你是要控制两个数码管,所以只用一个并口是不够的,至少还得有两个位选,动态显示不需要锁存器的,如果需要帮助可QQ 用户名
  • 单片机用1个按键控制60秒定时,通过2个数码管显示。按一下启动,再按停止...
    答:CLR P2.0 AJMP LOOP KEY_CHECK: ;看有没有键按下 MOV A,P3 ANL A,#0fFH ;逻辑与 CJNE A,#0FFH,KEY_CER ;如果读入的与写出的不相等,延时消抖 CLR KEYCARD RET KEY_CER: ;延时,再读入,看是否真的有键按下 ACALL DELAY1S MOV A,P3 ANL A,#0FFH...
  • 51单片机怎样用按键实现数码管位切换
    答:这要写程序,也是稍麻烦一点的。大概思路是这样的,用一个按键切换显示位,按一下,切换一位,是这样吧。用一个变量计数,每按一次键加1,一共切换多少位,就计数到多少。计到最大再回到第一位计数。例,四位数码管,计数为0,1,2,3,超过3就回0。好了,按键解决了,再解决显示的,计数值对...