定时器
一、将交通灯实验中数码管倒计时1s改为定时器实现
这个代码感觉逻辑上没问题,实际仿真出来倒计时的1s感觉要比实际的慢,可能是由于单片机执行语句时也需要耗费时间
实验仿真图如下
代码如下(示例):
#include <reg51.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar code a[]={
0x6f,0x7f,0x07,0x7d,0x6d,0x66,0x4f,0x5b,0x06,0x3f};//共阴数码管9到0
sbit red1=P2^0; //P2.0 南北红
sbit green1=P2^1; //P2.1 南北绿
sbit red2=P2^5; //P2.5 东西红
sbit green2=P2^6; //P2.6 东西绿
sbit yellow=P2^7; //P2.7 黄
char i=0;
void delay1s()//延时1s函数
{
uchar j;
j=i;
while(i<=20)
{
;}
i=0;
}
void delay500ms()//延时0.5s函数
{
uchar j;
j=i;
while(i<=10)
{
;}
i=0;
}
void timer_init() //定时器初始化
{
TMOD =0x10;//定时器T1方式1
//65536-50000=15536 转化为16进制为3cb0
TH1= 0x3c; //高四位
TL1=0xb0;//低四位
EA=1;//总中断允许
ET1=1;//允许定时器T1溢出的中断
TR1=1;//启动定时器T1
}
void main()
{
uchar j;
timer_init(); //定时器初始化
EX0=1;//允许外部中断0中断
IT0=1;//选择外部中断0为跳沿触发方式
PT1=1;//定时器T1中断为高优先级
while(1)//循环
{
for(j=6;j<=9;j++