51单片机用C语言实现交通灯(红绿灯)源程序实训QY-KP1
源程序如下:
/*
1、程序目的:使用定時器學習 倒計時 紅綠燈原理 主要程序和倒計時一樣
2、硬件要求:數碼管、晶振 12M
/
#include <reg52.h>
bit red,green,yellow,turnred; //定義紅、黃、綠及轉紅
標志
code unsigned char tab[]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//共陰數碼管 0-9
unsigned char Dis_Shiwei;//定義十位
unsigned char Dis_Gewei; //定義個位
void delay(unsigned int cnt) //用于動態掃描數碼管的
延時程序
{
while(–cnt);
}
main()
{
TMOD |=0x01;//定時器設置 10ms in 12M crystal 定時器 0,工作方式 1,16
位定時器
TH0=0xd8; //65535-10000=55535=D8F0(十六進制)
TL0=0xf0;
IE= 0x82; //中斷控制,EA=1 開總中斷,ET0=1:定時器 0 中斷允許
TR0=1; //開定時器 0 中斷
P1=0xfc;//紅燈亮,根據紅黃綠接燈的順序。
red =1;
while(1)
{
P0=Dis_Shiwei;//顯示十位,這里實現用 8 位數碼管,即左 1 位
P2=0;
delay(300);//短暫延時
P0=Dis_Gewei; //顯示個位,左數,2 位
P2=1;
delay(300);
}
}
/********************************/
/ 定時中斷 */
/********************************/
void tim(void) interrupt 1 using 1
{
static unsigned char second=60,count; //初值 60
TH0=0xd8;//重新賦值,10 毫秒定時
TL0=0xf0;
count++;
if (count100)
{
count=0;
second–;//秒減 1
if(second0)
{ //這里添加定時到 0 的代碼 ,可以是燈電路,繼電器吸合等,或者執
行一個程序
if(red) //紅滅,先轉黃
{
red=0;yellow=1;
second=4;
P1=0xF3;//黃燈亮 4 秒,黃燈為過渡燈,再根據情況轉綠或轉紅
}
else if(yellow && !turnred)
{
yellow=0;green=1;
second=25;
P1=0xCF;//綠燈亮 25 秒,
}
else if(green)
{
yellow=1;green=0;
second=4;
P1=0xF3;//黃燈亮 4 秒
turnred=1;
}
else if(yellow && turnred) //綠燈滅,轉黃燈,后紅燈,
turnred=1 時
{
red=1;yellow=0;
P1=0xFC;//紅燈亮 60 秒
second=60;
turnred=0; //接下來是轉黃,綠。
}
}
Dis_Shiwei=tab[second/10];//十位顯示值處理
Dis_Gewei=tab[second%10]; //個位顯示處理
QY-KP1交通燈智能控制及闖紅燈抓拍實訓系統主要由十字路口交通模型、交通信號控制機(柜)、闖紅燈抓拍系統(電子警察)、遠程監控軟件四部分組成。主要適用于國內“智能交通工程”、“公路運輸與管理”、“高等級公路維護與管理”、“交通安全與智能控制”等相關專業的實訓教學。
交通信號控制器:由S7-226 PLC(24路數字量輸入/16路繼電器輸出)及2個EM223(16路數字量輸入/16路繼電器輸出)開關量模塊組成。通過對I/O接口的編程,控制器可以實現對交通燈的紅、綠、黃燈定時控制及倒計時的信號觸發(倒計時由單片機控制板控制,當單片機接收到PLC的倒計時開始信號時,倒計時電路開始顯示9,然后每隔1s遞減1,直至顯示完1后,倒計時顯示燈熄滅,當接收到下一個倒計時又重新開始倒計時顯示)控制。
總結
以上是生活随笔為你收集整理的51单片机用C语言实现交通灯(红绿灯)源程序实训QY-KP1的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java实时百分比进度条_Java 进度
- 下一篇: Pascal基础(四)-常用函数和标准库