用定时器0的方式1实现第一个发光二极管以

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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);

}

}

相关文档
最新文档