这是自己做的文档中一个题目,运用自己学习的定时器加中断你来写一个流水灯,主要是用来检测自己对定时器的掌握。亮灯的代码没有封装函数,如有需要可以自己封装
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
- #include<reg51.h>
- /*
- sbit LED = P1^0;
- sbit LED1 = P1^1;
- sbit LED2 = P1^2;
- sbit LED3 = P1^3;
- sbit LED4 = P1^4;
- sbit LED5 = P1^5;
- sbit LED6 = P1^6;
- sbit LED7 = P1^7;
- */
- unsigned char cnt = 0;
- void main(void)
- {
- unsigned char i = 0;
- unsigned char num = 1;
-
- EA = 1;
- TMOD = 0x01;
- TH0 = 0xFC;//1ms定时器 0xFC67
- TL0 = 0x67;
- TR0 = 1;
- ET0 = 1;
- while(1)
- {
- switch(num)
- {
- case 1:
- if(cnt >= 100)
- {
- cnt = 0;
- P1 = ~(0x01 << i);
- i++;
- if(i >= 8)
- {
- i = 0;
- num = 0;
- }
- }
- break;
-
- case 0:
- if(cnt >= 100)
- {
- cnt = 0;
- P1 = ~(0x80 >> i);
- i++;
- if(i >= 8)
- {
- i = 0;
- num = 1;
- }
- }
- break;
-
- default:
- break;
- }
- }
-
- //return 0;
- }
- void InterruptTimer0() interrupt 1
- {
- ET0 = 0;
- TH0 = 0xFC;//1S定时器 0xFC67
- TL0 = 0x67;
- cnt++;
- ET0 = 1;
- }
复制代码
所有资料51hei提供下载:
LED-CESHI.rar
(80.16 KB, 下载次数: 11)
|