发布时间:2019-08-01 05:17:34
#include <reg52.h>
unsigned char code a[]={0x7f,0xdf,0xf7,0xfd};
unsigned char code b[]={0xbf,0xef,0xfb,0xfe};
unsigned char code LED[]={a,b};
unsigned char data i=0;
unsigned char data count=0; //50ms计数器
void system_init();
void main()
{
system_init(); // 系统初始化
while(1)
{
//空循环,主程序在等待中断的发生。
}
}
void system_init()
{
TMOD=0x01;
TH0=(65536-50000)>>8; //取高8位的值。
TL0=(65536-50000); //编译器自动取低8位的值。
ET0=1; //开定时器0中断。
EA=1; //开总中断
TR0=1; //开定时器0
P1=LED[0]; //一开始第1个状态就开始执行。
}
void Timer_isr(void) interrupt 1
{
TH0=(65536-50000)>>8; //取高8位的值。
TL0=(65536-50000); //编译器自动取低8位的值。
count++;
if(count==10) //计满10次,即10×50MS=0.5S
{
count=0; //计数器清0,准备下一次计数。
i++; //新的状态
if(i>1) i=0; //如果状态编号为2即过界了
P1=LED[i]; //把新的状态送给P1显示。
}
}
怎么灯不能交替一起亮
//假设晶振12MHZ,P1控制LED低电平亮#include "reg51.h"unsigned int YSJS=0;unsigned int P1BUF=0X03;void main(void){TMOD |= 0X10; //定时器1工作于方式1,16位定时器TH1 = 0XFF; //定时器1定时时间=500uSTL1 = 0X06;ET1 = 1; //使能定时器1中断EA =1; //开总中断P1 = P1BUF;while(1){}}void TIMER1(void) interrupt 3 //定时器1中断函数使用默认寄存器组{TH1 = 0XFF; //定时器1定时时间=500usTL1 = 0X06;YSJS++;if(YSJS==2000) //500uS*2000=1000000us=1s{P1 = P1BUF;YSJS = 0P1BUF = P1BUF<<2;IF(P1BUF==0)P1BUF=0X03;}}