#include<reg52.h>
delay10ms()
{
unsigned char a,b;
for(a=100;a>0;a--)
for(b=50;b>0;b--);
}
delay1ms()
{
unsigned char a,b;
for(a=10;a>0;a--)
for(b=50;b>0;b--);
}
unsigned char code tab[]=
{
0x3f,6,0x5b,0x4f,0x66,0x6d,0x7d,7,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71
};
main()
{
unsigned char m,i,j,k,l,p,cc2,cc3,cc4,cc5,o;
unsigned long c1,c2,cc;
unsigned int cc1;
unsigned char aa0,aa1,aa2,aa3,bb0,bb1,bb2,bb3;
unsigned char a0,a1,a2,a3,b0,b1,b2,b3;
bit q,n;
while(1)
{static dian=0x80,fuhao=0;
for (j=0;j<=3;j++)
{
k=0xfe<<j;
l=0xfe>>(8-j);
P0=k|l;
if(P0_4==0)
{
delay10ms();
if(P0_4==0)
{
while(P0_4==0)
{
P2=b0;
P1=0xfe;
delay1ms();
P2=0;
P2=b1;
P1=0xfd;
delay1ms();
P2=0;
P2=b2;
P1=0xfb;
delay1ms();
P2=0;
P2=b3;
P1=0xf7;
delay1ms();
P2=0;
P2=a0;
P1=0xef;
delay1ms();
P2=0;
P2=a1;
P1=0xdf;
delay1ms();
P2=0;
P2=a2;
P1=0xbf;
delay1ms();
P2=0;
P2=a3;
P1=0x7f;
delay1ms();
P2=0;
P2=dian;
P1=0xef;
delay1ms();
P2=0;
P2=fuhao;
P1=0xef;
delay1ms();
P2=0;
}
if(tab[4*j]==0x39)
{
n=1;
i=3;
}
else
{m++;
if(m<=4&n==0)
{
a3=a2;
a2=a1;
a1=a0;
a0=tab[4*j];
aa3=aa2;
aa2=aa1;
aa1=aa0;
aa0=4*j;
}
else
{
if(p<=3&n==1)
{
b3=b2;
b2=b1;
b1=b0;
b0=tab[4*j];
bb3=bb2;
bb2=bb1;
bb1=bb0;
bb0=4*j;
p++;
}
}
}
}
}
if(P0_5==0)
{
delay10ms();
if(P0_5==0)
{
while(P0_5==0)
{
P2=b0;
P1=0xfe;
delay1ms();
P2=0;
P2=b1;
P1=0xfd;
delay1ms();
P2=0;
P2=b2;
P1=0xfb;
delay1ms();
P2=0;
P2=b3;
P1=0xf7;
delay1ms();
P2=0;
P2=a0;
P1=0xef;
delay1ms();
P2=0;
P2=a1;
P1=0xdf;
delay1ms();
P2=0;
P2=a2;
P1=0xbf;
delay1ms();
P2=0;
P2=a3;
P1=0x7f;
delay1ms();
P2=0;
P2=dian;
P1=0xef;
delay1ms();
P2=0;
P2=fuhao;
P1=0xef;
delay1ms();
P2=0;
}
if(tab[4*j+1]==0x5e)
{
i=4;
n=1;
}
else
{m++;
if(m<=4&n==0)
{
a3=a2;
a2=a1;
a1=a0;
a0=tab[4*j+1];
aa3=aa2;
aa2=aa1;
aa1=aa0;
aa0=4*j+1;
}
else
{
if(p<=3&n==1)
{
b3=b2;
b2=b1;
b1=b0;
b0=tab[4*j+1];
bb3=bb2;
bb2=bb1;
bb1=bb0;
bb0=4*j+1;
p++;
}
}
}
}
}
if(P0_6==0)
{
delay10ms();
if(P0_6==0)
{
while(P0_6==0)
{
P2=b0;
P1=0xfe;
delay1ms();
P2=0;
P2=b1;
P1=0xfd;
delay1ms();
P2=0;
P2=b2;
P1=0xfb;
delay1ms();
P2=0;
P2=b3;
P1=0xf7;
delay1ms();
P2=0;
P2=a0;
P1=0xef;
delay1ms();
P2=0;
P2=a1;
P1=0xdf;
delay1ms();
P2=0;
P2=a2;
P1=0xbf;
delay1ms();
P2=0;
P2=a3;
P1=0x7f;
delay1ms();
P2=0;
P2=dian;
P1=0xef;
delay1ms();
P2=0;
P2=fuhao;
P1=0xef;
delay1ms();
P2=0;
}
if(tab[4*j+2]==0x77)
{
i=1;
n=1;
}
else
{
if(tab[4*j+2]==0x79)
{
q=1;
n=1;
}
else
{
m++;
if(m<=4&n==0)
{
a3=a2;
a2=a1;
a1=a0;
a0=tab[4*j+2];
aa3=aa2;
aa2=aa1;
aa1=aa0;
aa0=4*j+2;
}
else
{
if(p<=3&n==1)
{
b3=b2;
b2=b1;
b1=b0;
b0=tab[4*j+2];
bb3=bb2;
bb2=bb1;
bb1=bb0;
bb0=4*j+2;
p++;
}
}
}
}
}
}
if(P0_7==0)
{
delay10ms();
if(P0_7==0)
{
while(P0_7==0)
{
P2=b0;
P1=0xfe;
delay1ms();
P2=0;
P2=b1;
P1=0xfd;
delay1ms();
P2=0;
P2=b2;
P1=0xfb;
delay1ms();
P2=0;
P2=b3;
P1=0xf7;
delay1ms();
P2=0;
P2=a0;
P1=0xef;
delay1ms();
P2=0;
P2=a1;
P1=0xdf;
delay1ms();
P2=0;
P2=a2;
P1=0xbf;
delay1ms();
P2=0;
P2=a3;
P1=0x7f;
delay1ms();
P2=0;
P2=dian;
P1=0xef;
delay1ms();
P2=0;
P2=fuhao;
P1=0xef;
delay1ms();
P2=0;
}
if(tab[4*j+3]==0x71)
{
i=6;
n=1;
}
else
{
if(tab[4*j+3]==0x7c)
{
i=2;
n=1;
}
else
{m++;
if(m<=4&n==0)
{
a3=a2;
a2=a1;
a1=a0;
a0=tab[4*j+3];
aa3=aa2;
aa2=aa1;
aa1=aa0;
aa0=4*j+3;
}
else
{
if(p<=3&n==1)
{
b3=b2;
b2=b1;
b1=b0;
b0=tab[4*j+3];
bb3=bb2;
bb2=bb1;
bb1=bb0;
bb0=4*j+3;
p++;
}
}
}
}
}
}
if(i==6)//复位
{
a0=a1=a2=a3=b0=b1=b2=b3=0;
dian=0x80;
fuhao=0;
m=i=j=k=l=n=p=q=0;
aa0=aa1=aa2=aa3=bb0=bb1=bb2=bb3=0;
c1=c2=cc=cc1=cc2=cc3=cc4=cc5=0;
}
if(q==0)
{
P2=b0;
P1=0xfe;
delay1ms();
P2=0;
P2=b1;
P1=0xfd;
delay1ms();
P2=0;
P2=b2;
P1=0xfb;
delay1ms();
P2=0;
P2=b3;
P1=0xf7;
delay1ms();
P2=0;
P2=a0;
P1=0xef;
delay1ms();
P2=0;
P2=a1;
P1=0xdf;
delay1ms();
P2=0;
P2=a2;
P1=0xbf;
delay1ms();
P2=0;
P2=a3;
P1=0x7f;
delay1ms();
P2=0;
P2=dian;
P1=0xef;
delay1ms();
P2=0;
P2=fuhao;
P1=0xef;
delay1ms();
P2=0;
}
else
{
q=0;
c1=aa0+aa1*10+aa2*100+aa3*1000;
c2=bb0+bb1*10+bb2*100+bb3*1000;
if(i==1)//加法运算
{
cc=c1+c2;
}
if(i==2)//减法运算
{
if(c1>=c2)
{
cc=c1-c2;
}
else
{
cc=c2-c1;
fuhao=0x40;
}
}
if(i==3)//乘法运算
{
cc=c1*c2;
}
a3=tab[cc/10000000];
aa3=cc/10000000;
a2=tab[(cc%10000000)/1000000];
aa2=(cc%10000000)/1000000;
a1=tab[(cc%1000000)/100000];
aa1=(cc%1000000)/100000;
a0=tab[(cc%100000)/10000];
aa0=(cc%100000)/10000;
b3=tab[(cc%10000)/1000];
bb3=(cc%10000)/1000;
b2=tab[(cc%1000)/100];
bb2=(cc%1000)/100;
b1=tab[(cc%100)/10];
bb1=(cc%100)/10;
b0=tab[cc%10];
bb0=cc%10;
dian=0;//消除点
if(aa3==0)//消除多余的零
{
a3=0;
if(aa2==0)
{
a2=0;
if(aa1==0)
{
a1=0;
if(aa0==0)
{
a0=0;
if(bb3==0)
{
b3=0;
if(bb2==0)
{
b2=0;
if(bb1==0)
{
b1=0;
}
}
}
}
}
}
}
if(i==4)//除法运算
{
if(c2==0)
{
for(o=100;o>0;o--)
{
b2=b1=b0=0;
a3=0x79;
a2=a1=b3=0x77;
a0=0x3f;
P2=b0;
P1=0xfe;
delay1ms();
P2=0;
P2=b1;
P1=0xfd;
delay1ms();
P2=0;
P2=b2;
P1=0xfb;
delay1ms();
P2=0;
P2=b3;
P1=0xf7;
delay1ms();
P2=0;
P2=a0;
P1=0xef;
delay1ms();
P2=0;
P2=a1;
P1=0xdf;
delay1ms();
P2=0;
P2=a2;
P1=0xbf;
delay1ms();
P2=0;
P2=a3;
P1=0x7f;
delay1ms();
P2=0;
delay10ms();
}
i=6;
}
else
{
cc1=c1/c2;
a3=tab[cc1/1000];
aa3=cc1/1000;
a2=tab[(cc1%1000)/100];
aa2=(cc1%1000)/100;
a1=tab[(cc1%100)/10];
aa1=(cc1%100)/10;
a0=tab[cc1%10];
aa0=cc1%10;
dian=0x80;
cc2=(c1%c2)*10/c2;
b3=tab[cc2];
cc3=((c1%c2)*10%c2)*10/c2;
b2=tab[cc3];
cc4=(((c1%c2)*10%c2)*10%c2)*10/c2;
b1=tab[cc4];
cc5=((((c1%c2)*10%c2)*10%c2)*10%c2)*10/c2;
b0=tab[cc5];
if((((((c1%c2*10)%c2)*10%c2)*10%c2)*10%c2)*10/c2>=5)
{
b0=tab[cc5+1];
}
if(aa3==0)//消除多余的零
{
a3=0;
if(aa2==0)
{
a2=0;
if(aa1==0)
{
a1=0;
}
}
}
}
}
}
}
}
}
这个是数码管的
求用单片机设计一个秒表AT89C51
SETB EX1 SETB EA ;定时器初始化结束,下面循环显示即可 MOV R1, #99H ;0~99计数.MOV R7, #1 ;50ms计数.MOV P0, #0C0H MOV P2, #0C0H LOOP:SJMP LOOP ;--- DELAY: ;延时子程序.AA4: MOV R4, #0 DJNZ R4,DJNZ R4,RET ;---...
急求基于单片机AT89C51的多功能数字电子钟的汇编程序,高手进!~_百度知...
用89C51控制3个HC595,前两个595接8段数码显示管,显示“0”~“9”每秒跳动一次.第3个HC595接8个LED灯,每隔1秒闪烁1次.include<at89x52.h> include<intrins.h> define uchar unsigned char define uint unsigned int uchar table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90...
用C语言编写AT89C51单片机程序,设计一个智能数字钟。
这是我的课程设计,6个数码管,显示时分秒,三个按钮P0.0、P0.1、P0.2可以调时,有8个彩灯(可以不要),没闹钟、倒计时之类的。呵呵。include<AT89X52.H> define uchar unsigned char int i;\/\/***时钟的 uchar one[10]={0xbf,0xb0,0xdb,0xcf,0xe6,0xed,0xfd,0x07,0xff,0xef}...
1、 基于AT89C51单片机,利用定时器设计一个两位数码管显示电路。 设计...
1、 基于AT89C51单片机,利用定时器设计一个两位数码管显示电路。 设计要求:每隔2S显示数字加1,显示初值 5 我下周就要用了 ,麻烦大家了 谢谢啊 zzc3981 | 浏览1494 次 |举报 我有更好的答案推荐于2017-12-15 14:23:16 最佳答案 这个我仿真过了 是有用的,,,是从00开始显示 到了99会从新开始从00开始加...
以AT89C51单片机为核心,设计一个二进制计数器
直接赋值,就是二进制显示:比如:uchar dat = 3;P0 = dat; \/\/LED灯二进制方式显示数据dat.
用AT89C51单片机编写一个C语言程序实现2个数码管秒计数器,用4个按键...
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=sec\/10;LED2=sec%10;P2=0x01;P0=distab[LED1];delay(3);P2=0x02;P0=distab[LED2];delay(3);} void t0isr() interrupt 1 { TH0=(...
求一个基于AT89C51单片机的数字时钟程序,显示时、分、秒不要求闹钟!就...
TMOD = 0x11;\/\/ 定时器0, 1工作模式1, 16位定时方式 TH1 = 0xdc;TL1 = 0;TH0 = 0xFC;TL0 = 0x17;hour = 12;min = 00;sec = 00;sec100 = 0;dis_buf[0] = dis_code[hour \/ 10];\/\/ 时十位 dis_buf[1] = dis_code[hour % 10];\/\/ 时个位 dis_buf[3] = dis_code...
用AT89C51单片机,4位共阴极数码管,显示出1234 程序怎么写??? 请各位...
MOV 34H,#04H MOV 35H,#05H MOV 36H,#06H ACALL D0 JMP $-2 D0: MOV R0,#31H MOV R2,#11111110B MOV DPTR,#TAB D1: ORL P1,#00111111B MOV A,@R0 MOVC A,@A+DPTR MOV R3,#8 D2: RLC A MOV P3.2,C SETB P3.3 CLR ...
at89c51单片机实现电子时钟,不带闹铃。显示时分秒。求图求程序
\/*---延时子程序---*\/ void delay(uint count) \/\/delay { uint i;while(count){ i=200;while(i>0)i--;count--;} } void dsreset(void) \/\/send reset and initialization command { uint i; \/\/DS18B20初始化 DS=0;i=103;while(i>0)i--;DS=1;i=4;while(i>0)i--;} bit ...
求助!有谁比较懂硬件技术基础,AT89C51,单片机,帮我写个控制信号灯的程序...
流水灯呀:你把单片机的P0口就是左上角的32~39号引脚接上拉电阻(10K排阻)后,分别与1K电阻和发光二级管串联另一端接地,因为P0口带负载能力比较强所以用它。硬件连好了就可以编程了(最小系统你会吧我就不说了)C语言是根据硬件编程的程序如下:include<reg52.h> define uint unsigned int defin...