2020-11-22

实现单片机数码管数字从765432到765398的递减,每相差0.1秒减一次,当数减到765398时,输出HELLO,数码管用定时器1控制,流水灯用计时器0控制,流水灯每0.5秒流一次,当数字到765398时,8个二极管亮灭交替,时隔0.5秒,3秒后灭掉
没有烧录,不知道行不行-_-||
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uint w,aa=0,shu=432,bb=0;
uchar code table[]={0xf3,0x}
uchar ge,shi,bai;
uchar wela,dula;
uchar flag1,flag2;
void display(uchar b;uchar c;uchar d;uchar bai;uchar shi;uchar ge;)
void delay (uchar i);
void timer(){
TMOD=0x11;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET1=1;
ET0=1;
TR1=1;
TR0=1;
w=0xfe;
}
void main(){
timer();
while (1) {
if (flag2!=0)
display(7; 6; 5; bai; shi; ge); if (flag20)
TR1=1;
display (0xff; 0xfd; 0x69; 0x69; 0x5a; 0xae);
}
}
void time0() interrupt 1{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256; aa++;
if flag!=1; {
if (aa
10) {
P1=w;
aa=0;
w=crol(w,1); }
}
if flag1; {
TR0=1;
aa=0;
P1=0xff;
if (aa%10
0) {
aa=0;
P1=~P1;
if (aa60) {
TR0=0;
P1=0xff; }
} }}
void time1() interrupt 3{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
bb++; if (bb
2) {
shu–;
bb=0;
ge=shu/10;
shi=shu%100/10; bai=shu/100;
if (shu==398) {
flag1=1;
TR0=0;
TR1=0;
flag2=1;
TH0=(65536-50000)/256; TL0=(65536-50000)%256;
TH1=(65536-50000)/256; TL1=(65536-50000)%256; } }}
void display(uchar b;uchar c;uchar d;uchar bai;uchar shi;uchar ge){
dula=1;
P1=0xdf; 需要锁存器
dula=0;
P1=table[b];
wela=1;
wela=0;
delay(100);
dula=1;
P1=0xef;
dula=0;
P1=table[c];
wela=1;
wela=0;
delay(100);
dula=1;
P1=0xf7;
dula=0;
P1=table[d];
wela=1;
wela=0;
delay(100);
dula=1;
P1=0xfb;
dula=0;
P1=table[bai];
wela=1;
wela=0;
delay(100);
dula=1;
P1=0xfd;
dula=0;
P1=table[shi];
wela=1;
wela=0;
delay(100);
dula=1;
P1=0xfe;
dula=0;
P1=table[ge];
wela=1;
wela=0;
delay(100);}
void delay(uchar i){
uchar t;
for(t=0; t<i; t++);}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值