久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
超詳細的單片機交通信號燈控制程序
[打印本頁]
作者:
jkla
時間:
2020-4-7 21:32
標題:
超詳細的單片機交通信號燈控制程序
利用定時器計時,注釋非常詳細,可自己改變定時時間。
單片機源程序如下:
#include "reg52.h"
#define GPIO_TRAFFIC P2
#define GPIO_DIG P0
typedef unsigned char u8;
typedef unsigned int u16;
//3-8譯碼器引腳位定義
sbit LSA = P1^0;
sbit LSB = P1^1;
sbit LSC = P1^2;
//交通信號燈南北方向控制引腳位定義
sbit GREEN10 = P2^0;
sbit RED10 = P2^1;
sbit GREEN11 = P2^2;
sbit YELLOW11 = P2^3;
sbit RED11 = P2^4;
//交通信號燈東西方向控制引腳位定義
sbit GREEN00 = P1^6;
sbit RED00 = P1^7;
sbit GREEN01 = P2^5;
sbit YELLOW01 = P2^6;
sbit RED01 = P2^7;
u8 code smgduan[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //共陰
u8 displaydata[8]; //儲存信號燈倒計時
//定義一個全局變量
u8 second;
//各種函數的聲明
void Timer0Init();
void delay(u16 i);
void Digdisplay();
void trafficpros();
/*******************************
主函數:main
*******************************/
void main(void)
{
second = 1;
Timer0Init(); //初始化定時器T0;
while(1)
{
trafficpros();
}
}
/*******************************
定時器T0配置函數,只選擇TCON中TR
0觸發,定時10ms。
*******************************/
void Timer0Init()
{
TMOD |= 0x01;
TH0 = 0xd8;
TL0 = 0xf0; //設定初值55536,定時10ms
IE = 0x82; //開啟T0中斷和總中斷
TR0 = 1; //開啟定時器T0
}
/*******************************
中斷處理函數
*******************************/
void Time0() interrupt 1
{
static u16 i;
TH0 = 0xd8;
TL0 = 0xf0; //重裝初值
i++; //記下中斷的次數,100次為一秒
if(100 == i)
{
i = 0;
second++;
}
}
/*******************************
延時函數,延時約10μs
*******************************/
void delay(u16 i)
{
while(i--);
}
/*******************************
8位數碼管位選函數
*******************************/
void Digdisplay()
{
u8 i;
for(i = 0; i < 8; i++)
{
switch(i)
{
case 0:
LSA = 0; LSB = 0; LSC = 0; break;
case 1:
LSA = 1; LSB = 0; LSC = 0; break;
case 2:
LSA = 0; LSB = 1; LSC = 0; break;
case 3:
LSA = 1; LSB = 1; LSC = 0; break;
case 4:
LSA = 0; LSB = 0; LSC = 1; break;
case 5:
LSA = 1; LSB = 0; LSC = 1; break;
case 6:
LSA = 0; LSB = 1; LSC = 1; break;
case 7:
LSA = 1; LSB = 1; LSC = 1; break;
}
GPIO_DIG = displaydata[i];
delay(100);
GPIO_DIG = 0x00; //消影
}
}
/*******************************
交通信號燈控制函數
*******************************/
void trafficpros()
{
if(second > 74)
{
second = 1;
}
//南北方向通車和人行道
if(second < 32)
{
displaydata[0] = 0x00; //第一位數碼管不顯示
displaydata[1] = 0x00; //第二位數碼管不顯示
displaydata[2] = smgduan[(31 - second)/10];
displaydata[3] = smgduan[(31 - second)%10];
displaydata[4] = 0x00; //第五位數碼管不顯示
displaydata[5] = 0x00; //第六位數碼管不顯示
displaydata[6] = displaydata[2];
displaydata[7] = displaydata[3];
Digdisplay();
//每次先所有的燈進行熄滅
GPIO_TRAFFIC = 0xff;
GREEN00 = 1;
RED00 = 1;
GREEN10 = 0; //人行道綠燈亮
GREEN11 = 0; //車道綠燈亮
RED00 = 0; //東西方向人行道紅燈亮
RED01 = 0; //東西方向車道紅燈亮
}
//中間黃燈階段
else if(second < 38)
{
displaydata[0] = 0x00; //第一位數碼管不顯示
displaydata[1] = 0x00; //第二位數碼管不顯示
displaydata[2] = smgduan[(37 - second)/10];
displaydata[3] = smgduan[(37 - second)%10];
displaydata[4] = 0x00; //第五位數碼管不顯示
displaydata[5] = 0x00; //第六位數碼管不顯示
displaydata[6] = displaydata[2];
displaydata[7] = displaydata[3];
Digdisplay();
//每次先所有的燈進行熄滅
GPIO_TRAFFIC = 0xff;
GREEN00 = 1;
RED00 = 1;
RED10 = 0; //南北方向人行道紅燈亮
YELLOW11 = 0; //南北方向車道黃燈亮
RED00 = 0; //東西方向人行道紅燈亮
RED01 = 0; //東西方向車道紅燈亮
}
//東西方向通車和人行道
else if(second < 69)
{
displaydata[0] = 0x00; //第一位數碼管不顯示
displaydata[1] = 0x00; //第二位數碼管不顯示
displaydata[2] = smgduan[(68 - second)/10];
displaydata[3] = smgduan[(68 - second)%10];
displaydata[4] = 0x00; //第五位數碼管不顯示
displaydata[5] = 0x00; //第六位數碼管不顯示
displaydata[6] = displaydata[2];
displaydata[7] = displaydata[3];
Digdisplay();
//每次先所有的燈進行熄滅
GPIO_TRAFFIC = 0xff;
GREEN00 = 1;
RED00 = 1;
GREEN00 = 0; //東西方向人行道綠燈亮
GREEN01 = 0; //東西方向車道綠燈亮
RED10 = 0; //南北方向人行道紅燈亮
RED11 = 0; //南北方向車道紅燈亮
}
//中間黃燈階段
else
{
displaydata[0] = 0x00; //第一位數碼管不顯示
displaydata[1] = 0x00; //第二位數碼管不顯示
displaydata[2] = smgduan[(74 - second)/10];
displaydata[3] = smgduan[(74 - second)%10];
displaydata[4] = 0x00; //第五位數碼管不顯示
displaydata[5] = 0x00; //第六位數碼管不顯示
displaydata[6] = displaydata[2];
displaydata[7] = displaydata[3];
Digdisplay();
//每次先所有的燈進行熄滅
GPIO_TRAFFIC = 0xff;
GREEN00 = 1;
RED00 = 1;
RED00 = 0; //東西方向人行道紅燈亮
YELLOW01 = 0; //東西方向車道黃燈亮
RED10 = 0; //南北方向人行道紅燈亮
RED11 = 0; //南北方向車道紅燈亮
}
}
復制代碼
所有資料51hei提供下載:
交通信號燈.rar
(24.3 KB, 下載次數: 66)
2020-4-7 21:32 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
爾與一扇窗
時間:
2020-4-9 13:24
老哥有沒有整個工程文件
作者:
jkla
時間:
2020-4-10 09:03
爾與一扇窗 發表于 2020-4-9 13:24
老哥有沒有整個工程文件
所有的Keil工程代碼都在里面了,你還缺啥
作者:
..,
時間:
2020-6-9 12:49
老哥,有圖嗎
作者:
15975875172
時間:
2020-7-11 10:40
連仿真圖都沒有?
作者:
jkla
時間:
2020-8-25 20:29
15975875172 發表于 2020-7-11 10:40
連仿真圖都沒有?
有,不出
作者:
lzh876967654
時間:
2021-6-5 21:24
想要圖
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
久久国产精品免费一区二区三区
|
在线看片国产
|
国产一区二区影院
|
日本视频中文字幕
|
国产婷婷精品av在线
|
欧美无乱码久久久免费午夜一区
|
四虎影院在线观看免费视频
|
91视频在线
|
久久合久久
|
国产三级精品视频
|
99精品欧美一区二区三区
|
久久aⅴ乱码一区二区三区 亚洲欧美综合精品另类天天更新
|
日韩精品一区二区三区在线观看
|
亚洲精品中文字幕
|
久久99精品久久久97夜夜嗨
|
成人欧美一区二区三区在线播放
|
久久精品久久久久久
|
黄色毛片在线播放
|
国产黄色av电影
|
欧美精品片
|
午夜电影在线播放
|
91婷婷韩国欧美一区二区
|
日本超碰
|
久久国产精品一区二区
|
国产福利91精品一区二区三区
|
亚洲一区二区三区四区五区午夜
|
亚洲一一在线
|
激情综合五月
|
精品中文字幕在线观看
|
中文字幕一区二区三区精彩视频
|
三级黄视频在线观看
|
日本高清不卡视频
|
爱草在线
|
亚洲日本中文字幕在线
|
99久久精品免费看国产小宝寻花
|
日韩有码在线观看
|
超碰精品在线
|
美日韩视频
|
中文视频在线
|
精品在线一区
|
中文字幕一级毛片
|