资源简介
资源:Keil下.c工程
附:proteus硬件仿真工程
题目:采用单片机设计一个带有数码管显示的交通灯控制系统,能够实现以下功能要求:
东西、南北方向红、绿、黄灯亮/灭的合理控制;
东西、南北方向红、绿灯状态下,倒计时显示;
紧急情况处理,一键控制四个方向全部点亮红灯,数码管熄灭;
扩展功能要求:
可选择小键盘或者串口方式,根据实际交通状态,进行各方向通行时间调整,使交通控制更加合理。

代码片段和文件信息
#include
#define uchar unsigned char
uchar n=0; //计数变量
uchar s=0; //秒
uchar a=30; //设置参数;
sbit shi=P3^0;//数码管显示十位的输入端口
sbit ge=P3^1; //数码管显示个位的输入端口
sbit KEY=P3^3;
sbit KEY_CHANGE1=P3^2;//加5秒
sbit KEY_CHANGE2=P3^4; //减5秒 //定义按键输入端口
uchar code tab[]={0x3f0x060x5b0x4f0x660x6d0x7d0x070x7f0x6f};//数码管段码表
void delay(uchar k) //1ms延时函数
{
uchar i;
while(k--)
{
for(i=0;i<115;i++);
}
}
void DelayUs2x(unsigned char t)
{
while(--t);
}
void DelayMs(unsigned char t)
{
while(t--)
{
//大致延时1mS
DelayUs2x(245);
DelayUs2x(245);
}
}
void display(uchar num) //数码管显示函数
{
//显示倒数计时的十位
shi=0;
P2=tab[num/10];
delay(3);
shi=1;
//显示倒数计时个位
ge=0;
P2=tab[num%10];
delay(3);
ge=1;
}
void main()
{
EA=1; //开总中断
ET0=1; //开T0中断
TMOD=0x01; //设置T0工作在方式一
TH0=(65536-10000)/256; //给定时器T0高8位赋初值
TL0=(65536-10000)%256; //给定时器T0低8位赋初值
TR0=1; //启动T0
KEY=1;
KEY_CHANGE1=1;
KEY_CHANGE2=1;//按键输入端口电平置高
while(1){
while(KEY==1)
{
if(s {
if(s {
display(a-5-s); //25秒倒数计时
P1=0xee;
P0=0xbb;
}
else //过渡状态:东西黄灯,南北红灯,保持5秒
{
display(a-s); //5秒倒数计时
P1=0xee;
P0=0xdd;
}
}
else if(s<55) //南北绿灯,东西红灯,保持25秒
{
display(55-s); //25秒倒数计时
P1=0xbb;
P0=0xee;
}
else //过渡状态:南北黄灯,东西红灯,保持5秒
{
display(60-s); //5秒倒数计时
P1=0xdd;
P0=0xee;
}
if(!KEY){
DelayMs(10); //延时去抖,一般10-20ms
if(!KEY){
P1=0xee;
P0=0xee;
}
}
if(!KEY_CHANGE1)
break;
if(!KEY_CHANGE2)
break;
}
if(!KEY_CHANGE1)
a=a+5;
DelayMs(600);
if(!KEY_CHANGE2)
a=a-5;
DelayMs(600);
}
}
void time() interrupt 1 //T0中断,用于1s定时
{
TH0=(65536-10000)/256; //给定时器T0高8位赋初值
TL0=(65536-10000)%256; //给定时器T0低8位赋初值
++n; //每次中断计数变量加一
if(n==100) //1s定时时间到
{
n=0; //计数变量清零,准备下次重新计数
++s; //秒+1
if(s==60) //60秒到,一个交通灯状态循环完毕
s=0; //秒清零,准备下次计数
}
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2019-06-07 21:08 Keil_C51\
文件 5911 2019-06-07 21:04 Keil_C51\LED
文件 9971 2019-06-07 21:04 Keil_C51\LED.M51
文件 1386 2019-06-07 21:04 Keil_C51\LED.hex
文件 63 2019-06-07 21:04 Keil_C51\LED.lnp
文件 18945 2019-06-07 21:04 Keil_C51\LED.plg
文件 56916 2019-06-07 21:08 Keil_C51\LED.uvopt
文件 13439 2019-06-07 10:49 Keil_C51\LED.uvproj
文件 55317 2019-06-07 10:49 Keil_C51\LED_uvopt.bak
文件 0 2019-06-07 10:35 Keil_C51\LED_uvproj.bak
文件 6376 2009-05-07 14:37 Keil_C51\STARTUP.A51
文件 14048 2019-06-07 21:04 Keil_C51\STARTUP.LST
文件 749 2019-06-07 21:04 Keil_C51\STARTUP.OBJ
文件 6683 2019-06-07 21:04 Keil_C51\jiaotong_led.LST
文件 6071 2019-06-07 21:04 Keil_C51\jiaotong_led.OBJ
文件 2398 2019-06-07 21:08 Keil_C51\jiaotong_led.c
目录 0 2019-06-07 21:08 proteus仿真工程\
文件 19371 2019-06-07 19:08 proteus仿真工程\Backup Of 交通灯.pdsbak
文件 19664 2019-06-07 21:04 proteus仿真工程\Last Loaded 交通灯.pdsbak
文件 19569 2019-06-07 21:08 proteus仿真工程\交通灯.pdsprj
文件 2574 2019-06-07 21:08 proteus仿真工程\交通灯.pdsprj.zhaojingyuan.赵静圆.workspace
- 上一篇:滴滴出行行程单
- 下一篇:discuz插件自动回帖 商业版4.1.5
相关资源
- 51 单片机 红外避障小车 大集合136
- STC8951系列单片机中方指南
- 基于MCS_51单片机的工业屏柜散热方案
- MCS_51单片机与8255A的接口设计
- 飞思卡尔单片机MC9S12XS12G128驱动(硬件
- 51单片机PWM程序,占空比、周期可调整
- 单片机和adc0809数字电压表
- PIC单片机完成的电子密码锁
- 单片机、ADC0808809设计简易数字电压表
- 51单片机多功能自行车测速仪
- 单片机做的6位时分秒数字钟
- 单片机电子时钟 闹钟 日历
- proteus仿真 AT89C51输出各种波形
- 音乐代码转换软件 单片机编程时用
- 单片机课程设计 篮球计分器
- 00
- 用51单片机实现G代码翻译
- 简易的电阻电容测量电路
- 单片机与温度传感器DS18B20的程序设计
- 51单片机基于protues的几个仿真实例
- 基于52单片机的直流电压测量
- 38k单片机红外发送代码、keil
- 51单片机PCB设计图
- PC -- 单片机的串口数据传输系统设计
- 51单片机控制舵机程序
- 武汉理工大学 单片机课程设计 16*16点
- 51单片机读取温度数据存储到SD卡中并
- 【单片机】51单片机数码管显示万年历
- 浙江工业大学2005-2006学年单片机习题
- 单片机与PC机串口通讯仿真
评论
共有 条评论