標題:
51單片機實現(xiàn)紅綠燈控制的代碼+Proteus仿真
[打印本頁]
作者:
Zerozz
時間:
2018-11-30 14:08
標題:
51單片機實現(xiàn)紅綠燈控制的代碼+Proteus仿真
51實現(xiàn)紅綠燈控制仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png
(20.4 KB, 下載次數(shù): 112)
下載附件
2018-11-30 16:31 上傳
單片機源程序如下:
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
//定義共陰數(shù)碼管段碼0-9
uchar code segment[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x27,0x7F,0x6F};
sbit A_R = P2 ^ 0; // 定義A路的紅燈
sbit A_Y = P2 ^ 1; // 定義A路的黃燈
sbit A_G = P2 ^ 2; // 定義A路的綠燈
sbit B_R = P2 ^ 3; // 定義B路的紅燈
sbit B_Y = P2 ^ 4; // 定義B路的黃燈
sbit B_G = P2 ^ 5; // 定義B路的綠燈
sbit A_SEG_EN_1 = P0 ^0; // 定義A路的數(shù)碼管的第一個位的使能
sbit A_SEG_EN_2 = P0 ^1; // 定義A路的數(shù)碼管的第二個位的使能
sbit B_SEG_EN_1 = P0 ^2; // 定義B路的數(shù)碼管的第一個位的使能
sbit B_SEG_EN_2 = P0 ^3; // 定義B路的數(shù)碼管的第二個位的使能
sbit key = P0 ^ 7; // 緊急按鍵
bit flag = 0; // 標志是否處于緊急狀態(tài),緊急狀態(tài)flag=1
//作用:延時 z ms
//參數(shù):z
//返回值:
void delay(uint z) // 利用不停的運行空代碼來消耗時間
{
uint x, y;
for (x = z; x>0; x--)
for (y = 110; y>0; y--);
}
void check_buttn()
{
//檢測按鍵key
if (key == 0) // 如果按鍵被按下
{
delay(10); // 消抖
if (key == 0) // 確認按鍵被按下
{
flag = !flag; // 緊急標志位取反
while (!key); // 等待按鍵釋放
}
}
}
void seg_display(int numA, int numB)
{
P0 |= 0x7F; // 關閉所有數(shù)碼管的片選
P3 = segment[numA/10]; // 顯示A路計時的十位
A_SEG_EN_1 = 0; // 打開A路的十位的使能
P1 = segment[numB/10]; // 顯示B路計時的十位
B_SEG_EN_1 = 0; // 打開B路的十位的使能
delay(5); // 延時,是數(shù)據(jù)在數(shù)碼管上停留一段時間
P0 |= 0x7F; // 關閉所有數(shù)碼管的片選
P3 = segment[numA%10]; // 顯示A路計時的個位
A_SEG_EN_2 = 0; // 打開A路的個位的使能
P1 = segment[numB%10]; // 顯示B路計時的個位
B_SEG_EN_2 = 0; // 打開B路的個位的使能
delay(5); // 延時,是數(shù)據(jù)在數(shù)碼管上停留一段時間
}
void display(int numA, int numB)
{
int i = 0;
int temp = P2; // 保存紅綠燈的狀態(tài)
for(i=0; i<50; i++)
{
check_buttn(); // 按鍵檢測
if(flag) // 如果處于緊急狀態(tài)
{
while(flag) // 緊急狀態(tài)中
{
P2 = 0x09; // 將AB路都變成紅燈
seg_display(numA, numB); // 顯示計時
check_buttn(); // 按鍵檢測
}
P2 = temp; // 還原進入緊急之前的狀態(tài)
}
seg_display(numA, numB); // 顯示計時
}
}
void main()
{
int j=0;
P2 = 0; //先關閉所有的紅綠燈,為了防止剛打開仿真的時候有閃爍
while(1)
{
A_G = 1;
B_R = 1;
for (j=10; j>=0; j--)
display(j/2, j/2);
P2 = 0;
for (j=5; j>=0; j--)
{
A_Y = 1;
B_R = 1;
display(j, j+25);
A_Y = 0;
B_R = 1;
display(j, j+25);
}
P2 = 0;
A_R = 1;
B_G = 1;
for (j=25; j>=0; j--)
display(j+5, j);
P2 = 0;
A_R = 1;
B_Y = 1;
for (j=5; j>=0; j--)
display(j, j);
P2 = 0;
}
}
復制代碼
所有資料51hei提供下載:
交通燈.rar
(48.19 KB, 下載次數(shù): 228)
2018-11-30 14:07 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
北燕思緣
時間:
2018-11-30 20:07
可以,頂一下
作者:
Vantage666
時間:
2020-12-7 11:50
這個還是十字路口的
作者:
alexxhtyz
時間:
2021-12-16 13:09
能發(fā)一下元件表嗎
作者:
AINA2019
時間:
2022-5-8 15:49
有原件表嗎
作者:
17867122535
時間:
2024-12-24 14:58
AINA2019 發(fā)表于 2022-5-8 15:49
有原件表嗎
原件圖
作者:
17867122535
時間:
2024-12-24 14:58
有原件圖不
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1