#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit led_red=P1^0;
sbit led_green=P1^1;
sbit led_yellow=P1^2;
uchar t,g,x,q,num;
int flag_yellow=0,flag_green=0,flag_red=1; //交通灯切换标志
uchar max_num=26; //初始计时最大值
uint n,i;
uchar code duan[10]={0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90}; //0-9共阳
/////////函数申明
void delay(uint k); //延时函数
void ji();
void display(); //数码管显示
void inti(); //定初值的函数
void led_display(); //交通灯
//////主函数
void main()
{
inti();
while(1)
{
display(); //在主函数中达到显示数值的目的
led_display();
}
}
void led_display()
{
if(flag_red==1)
{
led_yellow=1;
led_red=0;
}
else if(flag_green==1)
{
led_red=1;
led_green=0;
}
else if(flag_yellow==1)
{
led_green=1;
}
}
void delay(uint k) //延时函数
{ for(k;k>0;k--)
for(n=110;n>0;n--);
}
void ji()
{
if(flag_yellow==1&&t==5) //黄灯闪烁必须放这里
{
led_yellow =~ led_yellow;
}
if(t==20) //一秒时间到
{
t=0;
q++;
num=max_num- q%max_num; //实现倒计时
if(num==max_num &&flag_red==1)
{
TR0=0;
q=1;
num=20;
flag_green=1;
flag_red=0;
max_num=21; //绿灯20秒
TR0=1;
}
if(num==21 &&flag_green==1)
{
TR0=0;
q=1;
num=5;
flag_yellow=1;
flag_green=0;
max_num=6; //黄灯5秒
TR0=1;
}
if(num==6 &&flag_yellow==1)
{
TR0=0;
q=0;
num=25;
flag_red=1;
flag_yellow=0;
max_num=25; //
TR0=1;
}
}
x=num/10;
g=num%10;
//个和十用秒计时
}
void display() //数码管显示
{
// if(key==0)
// TR0=0;
// else if(key==1)
// TR0=1;
//SW();
ji();
//个位
P2=0x01; //端口位置16进制
P0=duan[g];
delay(1);
P0=0Xff; //使P0端口电位置0
//十位
P2=0x02;
P0=duan[x];
delay(1);
P0=0Xff;
}
void inti() //初始化函数
{
g=0,x=0; //显示计时初始化
TMOD=0X01; //定时器0工作方式1
TH0=(65536-50000)/256; //(65536-50000)/256; //撞入晶振为12的初值,定50ms为50000
TL0=(65536-50000)%256; //(65536-50000)%256; //记满后向THO进一位
EA=1; //开总中断
ET0=1; //开定时器0中断
TR0=1; //定时器0运行
}
void time0() interrupt 1 //中断服务函数
{
TH0=(65535-50000)/256; //再赋初值
TL0=(65535-50000)%256;
t++;
}
没有合适的资源?快使用搜索试试~ 我知道了~
定时器之红绿灯点亮及闪烁控制
共41个文件
bak:6个
lst:4个
obj:4个
需积分: 49 14 下载量 53 浏览量
2020-04-26
17:11:05
上传
评论 7
收藏 111KB ZIP 举报
温馨提示
数码管显示红绿灯时间,红绿黄三灯分别在25,20,5秒倒计时过程中点亮或者闪烁,使用定时器计时,带有proteus仿真,有详细的注释,使用keil5开发环境,比较综合,适合新手学习51单片机。同时带有proteus仿真,以备代码调试。
资源推荐
资源详情
资源评论
收起资源包目录
红绿灯.zip (41个子文件)
keil
两位数码管(1).M51 8KB
两位数码管.uvgui_lan(1).bak 69KB
两位数码管.hex 1KB
两位数码管.uvgui(1).lan 69KB
两位数码管(1).lnp 68B
两位数码管.lnp 68B
两位数码管.build_log.htm 953B
STARTUP(1).A51 6KB
两位数码管(1).OBJ 4KB
STARTUP.OBJ 758B
两位数码管(1).__i 40B
两位数码管_uvopt(1).bak 5KB
STARTUP(1).OBJ 758B
两位数码管(1) 4KB
两位数码管.LST 755B
STARTUP(1).LST 14KB
两位数码管_uvproj.bak 0B
两位数码管.uvopt 6KB
两位数码管_uvopt.bak 5KB
两位数码管(1).hex 592B
两位数码管.OBJ 7KB
STARTUP.A51 6KB
两位数码管.M51 10KB
两位数码管.c 2KB
两位数码管(1).LST 729B
两位数码管.uvgui_lan.bak 69KB
STARTUP.LST 14KB
两位数码管(1).uvopt 5KB
两位数码管 6KB
两位数码管.__i 68B
两位数码管.build_log(1).htm 404B
两位数码管_uvproj(1).bak 0B
两位数码管(1).c 1KB
两位数码管.uvgui.lan 136KB
两位数码管.uvproj 14KB
pds
Backup Of 2λ(1).pdsbak 2KB
2λ.pdsprj.LANFENG.lan.workspace 2KB
Last Loaded 2λ.pdsbak 17KB
2λ.pdsprj 19KB
Backup Of 2λ.pdsbak 2KB
2λ.pdsprj.LANFENG.lan(1).workspace 2KB
共 41 条
- 1
资源评论
.岚.风.
- 粉丝: 24
- 资源: 9
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Facebook.apk
- 推荐一款JTools的call-this-method插件
- json的合法基色来自红包东i请各位
- 项目采用YOLO V4算法模型进行目标检测,使用Deep SORT目标跟踪算法 .zip
- 针对实时视频流和静态图像实现的对象检测和跟踪算法 .zip
- 部署 yolox 算法使用 deepstream.zip
- 基于webmagic、springboot和mybatis的MagicToe Java爬虫设计源码
- 通过实时流协议 (RTSP) 使用 Yolo、OpenCV 和 Python 进行深度学习的对象检测.zip
- 基于Python和HTML的tb商品列表查询分析设计源码
- 基于国民技术RT-THREAD的MULTInstrument多功能电子测量仪器设计源码
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功