C51单片机--定时器实验

这篇博客介绍了如何使用C51单片机的定时器来改进交通灯数码管倒计时,并通过引入矩阵键盘实现对红绿灯变换时间的设置。实验中,作者注意到倒计时可能因单片机执行时间而稍有延迟,同时提供了部分代码示例和仿真结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定时器


一、将交通灯实验中数码管倒计时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++
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值