用定时器1控制四位数码管从6432减到6393保持住这个数值,同时用定时器0控制流水灯从上至下以500ms移动同时停止!!!然后流水灯全部闪烁2.4秒后熄灭!继而数码管上显示6666

来源:互联网 发布:淘宝店铺广告语 编辑:程序博客网 时间:2024/05/21 22:59
#include<reg52.h>#include<intrins.h>#define uchar unsigned char #define uint unsigned intsbit dula=P2^6;sbit wela=P2^7;uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};uchar temp,bai,shi,ge,aa,flag,flag1,t0,t1;uint shu;void display(uchar aa,uchar bai,uchar shi,uchar ge);void init();void delay(uint z);void main(){init();while(1){if(flag1!=1)   display(6,bai,shi,ge);   else   display(6,6,6,6);}}void init(){shu=432;temp=0xfe;P1=temp;TMOD=0x11;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TH1=(65536-50000)/256;TL1=(65536-50000)%256;EA=1;ET0=1;TR0=1;ET1=1;TR1=1;}void time1() interrupt 3{TH1=(65536-50000)/256;TL1=(65536-50000)%256;t1++;if(t1==2){t1=0;bai=shu/100;shi=shu%100/10;ge=shu%10;shu--;if(shu==393){TR0=0;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TR0=1;t0++;P1=0xff;TR1=0;flag=1;  }}}void time0() interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;t0++; if(flag!=1){if(t0==10){t0=0;temp=_crol_(temp,1);P1=temp;//flag1=1;}} else{if(t0%4==0)P1=~P1;if(t0==48){TR0=0;P1=0xff;flag1=1;}}}void display(uchar aa,uchar bai,uchar shi,uchar ge){wela=1;P2=0xfe;wela=0;dula=1;P0=tab[aa];dula=0;delay(5);wela=1;P2=0xfd;wela=0;dula=1;P0=tab[bai];dula=0;delay(5);wela=1;P2=0xfb;wela=0;dula=1;P0=tab[shi];dula=0;delay(5);wela=1;P2=0xf7;wela=0;dula=1;P0=tab[ge];dula=0;delay(5);}void delay(uint z){uint x,y;for(x=0;x<z;x++)for(y=0;y<110;y++);}
其中发现的一个错误:for()后加分号导致程序不能运行;灯闪烁时间本来是写的三秒钟但是t0取余过程中要考虑到取余的次数是偶数次因此将时间换成了2.4秒;数码管最后静止的数本来是6398;但是我发现流水灯亮不了最后一个灯,因此数字也改了一下
0 0