第二版增加闪灯板,可能不是很完善希望大家指正。
- #include <STC8H.H>
- #define MAIN_Fosc 24000000UL
- #define uint unsigned int
- #define uchar unsigned char
- uchar status = 0; //初始化状态字
- sbit key = P3^5; //按键可自行更改
- uchar tr0cnt = 0; //TR0计数
- uchar flash = 0xaa; //1,3,5,7交替闪灯
- void delayms(uint ms)
- {
- uint i;
- do {
- i = MAIN_Fosc / 6000;
- while(--i);
- } while(--ms);
- }
- void Timer0_Isr(void) interrupt 1
- {
- tr0cnt++;
- P2 = flash;
- if(tr0cnt==50) //1秒闪一次
- {
- flash = ~flash;
- tr0cnt =0;
- }
- }
-
- void Timer0_Init(void) //20毫秒@24.000MHz
- {
- AUXR &= 0x7F; //定时器时钟12T模式
- TMOD &= 0xF0; //设置定时器模式
- TL0 = 0xC0; //设置定时初始值
- TH0 = 0x63; //设置定时初始值
- TF0 = 0; //清除TF0标志
- //TR0 = 1; //定时器0开始计时
- ET0 = 1; //使能定时器0中断
- EA =1;
- }
- void main(void)
- {
- P2M0=0x00;
- P2M1=0x00;
- P3M0=0x00;
- P3M1=0x00;
- Timer0_Init();
- while(1)
- {
- if(!key)
- {
- delayms(10);
- if(!key)
- {
-
- status++;
- if(status==1)
- {
- P2=0xfe; //P2.0亮灯
- }
- else if(status==2)
- {
- P2=0xf8; //P2.0-P2.2亮灯
- }
- else if(status==3)
- {
- P2=0xc0; //P2.0-P2.7亮灯
- }
- else if(status==4)
- {
- TR0=1; //开启定时器
- }
- else if(status==5)
- {
- TR0 = 0; //关闭定时器
- tr0cnt = 0;
- status=0;
- P2=0xff; //灭灯
- }
- while(!key); //等待按键释放
- }
- }
- }
- }
复制代码
|