用定时器0的方式1实现第一个发光二极管以
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/**********************************
功能用定时器0的方式1实现第一个发光二极管以200ms间隔闪烁,用定时器1的方式1实现数码
管的前两位59S循环计时
**************************************/
#include
#define uchar unsigned char
#define uint unsigned int
sbit duan=P2^6;
sbit wela=P2^7;
sbit led=P1^0;
uchar shu,num0,num1,flag;
uchar code table[]=
{0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39 ,0x5e,0x79,0x71};
/**********初始化函数***************/
void init()
{
flag=1;
wela=0;
P0=0xff;
duan=0;
P0=0x00;// 初始化关显示
shu=0;
num0=0;
num1=0;
TMOD=0x11;//选择计数器TO模式1定时器1选择模式1 TH0=(65536-46080)/256;
TL0=(65536-46080)%256;//定时器0实现50MS定时
TH1=(65536-46080)/256;
TL1=(65536-46080)%256;//定时器1实现50MS定时
EA=1;//开总中断
ET0=1;//开定时器0中断
ET1=1;
TR0=1; //定时器0开始计数
TR1=1;
}
/*******延时函数***************/
void delay(uchar z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/************显示函数***********/
void display(uchar temp)
{
uchar shi,ge;
temp=shu;
shi=temp/10;
ge=temp%10;
if(flag==1)
{
P0=0xff; //消隐
wela=1;
P0=0xfe;//第一个数码管选中
wela=0;
duan=1;
P0=table[shi];
duan=0;
delay(1);
P0=0xff;//消隐
wela=1;
P0=0xfd;//第二个数码管选中
wela=0;
duan=1;
P0=table[ge];
duan=0;
delay(1);
}
}
/******定时器0中断函数*********/
void T0_time() interrupt 1 //定时器0中断级别为1 {
TH0=(65536-46080)/256;//重装处值
TL0=(65536-46080)%256;
num0++;
if(num0==4)//200MS
{
num0=0;
led=~led;
}
}
/******定时器1中断函数*********/
void T1_time() interrupt 3 //定时器1中断级别为3 {
TH1=(65536-46080)/256;//重装处值
TL1=(65536-46080)%256;
num1++;
if(num1==20)
{
num1=0;
shu++;
flag=1;
if(shu>59)
{
shu=0;
flag=1;
//display(shu);
flag=0;
}
}
}
void main()
{
init();
while(flag)
{
display(shu);
}
}