使两位数码管从00开始,间隔1s加1,加到15后回到00状态。(要求:使用定时器1定时,定时50ms中断一次。)


 1 /*本人水平太菜,代码不怎么滴,希望给你带来帮助,不喜勿喷*/

/*使两位数码管从00开始,间隔1s加1,加到15后回到00状态。(要求:使用定时器1定时,定时50ms中断一次。*/ 2 #include<reg51.h> 3 unsigned char code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; 4 sbit A1=P1^0;//我不太懂锁存器,所以用的是74LS138模块 5 sbit B1=P1^1; 6 sbit C1=P1^2; 7 int num=0,x=0;//num表示00-15的数,x表示重复次数 8 void delay(int i) //i * 1ms 9 { 10 int x,y; 11 for(x=0;x<i;x++) 12 for(y=0;y<120;y++); //1ms 13 } 14 main() 15 { 16 IE=0X88;//开中断 17 TMOD=0x10; //定时器设置成工作方式1 18 TH1=(65536-50000)/256; //相当于50ms 19 TL1=(65536-50000)%256; 20 TR1=1; 21 while(1) 22 { 23 A1=0;B1=1;C1=1; 24 P0=tab[num/10]; 25 delay(1); 26 P0=0x00; 27 28 A1=1;B1=1;C1=1; 29 P0=tab[num%10]; 30 delay(1); 31 P0=0x00;//消隐用的 32 } 33 } 34 void timer1(void)interrupt 3 //定时器1中断 3 35 { 36 if(x==20)//重复20次,相当于20*50ms=1000ms=1s 37 { 38 x=0; 39 num++; 40 if(num>15) 41 num=0; 42 } 43 TH1=(65536-50000)/256; 44 TL1=(65536-50000)%256; 45 x++; 46 }

 

protues仿真:


 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM