交通灯程序设计C语言,基于MCS-51的交通灯程序设计(c语言控制直行左转,包含程序)...
#include
#include
#define uint? ?? ???unsigned int
#define uchar? ?? ???unsigned char
#define? ?? ???OFF 0? ?? ???//定義燈泡開關
#define? ?? ???ON? ?? ???1
sbit? ?? ???ew_zx_red = P1^0;? ?? ?? ? //東西直行紅黃綠
sbit? ?? ???ew_zx_yellow = P1^1;
sbit? ?? ???ew_zx_green = P1^2;
sbit? ?? ???ew_zz_red = P1^3;? ?? ?? ? //東西左轉紅黃綠
sbit? ?? ???ew_zz_yellow = P1^4;
sbit? ?? ???ew_zz_green = P1^5;
sbit? ?? ???sn_zx_red = P2^0;? ?? ?? ? //南北直行紅黃綠
sbit? ?? ???sn_zx_yellow = P2^1;
sbit? ?? ???sn_zx_green = P2^2;
sbit? ?? ???sn_zz_red = P2^3;? ?? ?? ? //南北左轉紅黃綠
sbit? ?? ???sn_zz_yellow = P2^4;
sbit? ?? ???sn_zz_green = P2^5;
sbit? ?? ???seg_1 = P1^6;? ?? ?? ?//東西數碼管位選開關
sbit seg_2 = P1^7;
sbit? ?? ???seg_3 = P2^6;? ?? ?? ?//南北數碼管位選開關
sbit seg_4 = P2^7;
int time = 0;? ?? ???//計時器
int count = 0;
unsigned char SEG_CA[10] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};
unsigned char SEG_CC[10] = {0x3f, 0x06, 0x5b, 0x1f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};
void delay()
{
int i;
for(i = 0; i < 10; i++);
}
void display_ew(unsigned int num)? ?? ?? ?//東西數字顯示
{
P0 = SEG_CA[num/10];? ?? ?? ? //點亮數字高位
seg_1 = ON;
delay();
seg_1 = OFF;
P0 = SEG_CA[num%10];? ?? ?? ? //點亮數字低位
seg_2 = ON;
delay();
seg_2 = OFF;
}
void display_sn(unsigned int num)? ?? ?? ?//南北數字顯示
{
P0 = SEG_CA[num/10];? ?? ?? ?//點亮數字高位
seg_3 = ON;
delay();
seg_3 = OFF;
P0 = SEG_CA[num%10];? ?? ?? ?//點亮數字低位
seg_4 = ON;
delay();
seg_4 = OFF;
}
void display_ew_shan(unsigned int num)? ?? ?? ?//東西3s 倒計時閃爍顯示
{
if(count < 2000)
display_ew(num);
else
{
seg_1 = OFF;
seg_2 = OFF;
}
}
void display_sn_shan(unsigned int num)? ?? ?? ?//南北3s倒計時閃爍顯示
{
if(count < 2000)
display_sn(num);
else
{
seg_3 = OFF;
seg_4 = OFF;
}
}
void init()
{
P0 = 0x00;
P1 = 0x00;
P2 = 0x00;
EA = 0;? ?? ???//關總中斷
ET0 = 1;? ?? ???//開定時器0中斷
TMOD = 0x02;? ?? ???//定時器0工作方式2
TL0 = 6;? ?? ???//定時250us
TH0 = 6;
EA = 1;? ?? ?? ? //開總中斷
TR0 = 1;? ?? ?? ?//開始定時
}
void main()
{
init();
while(1)
{
/*************************************************************
開始東西直行綠燈亮,東西左轉紅燈亮27s,顯示綠燈倒計時30s
南北直行、左轉紅燈亮50s,顯示紅燈倒計時50s
*************************************************************/
while(time%100 < 27)
{
ew_zx_green = ON;? ?? ?? ?//東西直行綠燈亮,顯示27s
ew_zx_yellow = OFF;
ew_zx_red = OFF;
display_ew(30 - time);
ew_zz_red = ON;? ?? ?? ?//東西左轉紅燈亮
ew_zz_green = OFF;
ew_zz_yellow = OFF;
sn_zx_red = ON;? ?? ?? ?//南北直行紅燈亮,顯示時間50s
sn_zx_yellow = OFF;
sn_zx_green = OFF;
display_sn(50 - time);
sn_zz_red = ON;? ?? ?? ?//南北左轉紅燈亮,顯示時間50s
sn_zz_yellow = OFF;
sn_zx_green = OFF;
}
/*************************************************************
東西直行黃燈亮3s, 倒計時開始閃爍
東西左轉,南北方向不變
*************************************************************/
while(time%100 >= 27 && time%100 < 30)
{
ew_zx_yellow = ON;? ?? ?? ?//東西直行黃燈亮 ,顯示時間3s
ew_zx_red = OFF;
ew_zx_green = OFF;
display_ew_shan(30 - time);
display_sn(50 - time);
}
/*************************************************************
東西左轉綠燈亮17s,直行紅燈亮 ,顯示綠燈倒計時20s
南北方向不變
*************************************************************/
while(time%100 >= 30 && time%100 < 47)
{
ew_zz_green = ON;? ?? ???//東西左轉綠燈亮,顯示時間17s
ew_zz_red = OFF;
ew_zz_yellow = OFF;
display_ew(50-time);
ew_zx_red = ON;? ?? ?? ?//東西直行紅燈亮
ew_zx_yellow =OFF;
ew_zx_green = OFF;
display_sn(50-time);? ?? ?? ?//南北繼續顯示倒計時
}
/*************************************************************
東西左轉黃燈亮3s, 倒計時開始閃爍 3s
東西直行,南北方向不變
*************************************************************/
while(time%100 >= 47 && time%100 < 50)
{
ew_zz_yellow = ON;? ?? ???//東西左轉黃燈亮,顯示時間3s
ew_zz_red = OFF;
ew_zz_green = OFF;
display_ew_shan(50-time);
display_sn(50-time);? ?? ?? ?//南北繼續顯示倒計時
}
/*************************************************************
東西左轉紅燈亮50s,直行不變,顯示倒計時50s
南北直行綠燈亮27,左轉不變,顯示綠燈倒計時30s
*************************************************************/
while(time%100 >=50 && time%100 < 77)
{
sn_zx_green = ON;? ?? ???//南北直行綠燈亮,顯示時間27s
sn_zx_yellow = OFF;
sn_zx_red = OFF;
display_sn(80 - time);
ew_zz_red = ON;? ?? ?? ? //東西左轉紅燈亮,顯示時間50s
ew_zz_yellow = OFF;
ew_zz_green = OFF;
display_ew(100 - time);
}
/*************************************************************
南北直行黃燈亮3s,左轉不變,顯示黃燈閃爍倒計時3s
東西不變
*************************************************************/
while(time%100 >= 77 && time%100 < 80)
{
sn_zx_yellow = ON;? ?? ???//南北直行黃燈亮,顯示時間3s
sn_zx_red = OFF;
sn_zx_green = OFF;
display_sn_shan(80 - time);
display_ew(100 - time);
}
/*************************************************************
南北左轉綠燈亮17s,直行不變,顯示綠燈倒計時20s
東西不變
*************************************************************/
while(time%100 >=80 && time%100 <97)
{
sn_zz_green = ON;? ?? ?? ?//南北左轉綠燈亮, 顯示17s
sn_zz_red = OFF;
sn_zz_yellow = OFF;
display_sn(100-time);
sn_zx_red = ON;? ?? ???//南北直行紅燈亮
sn_zx_yellow = OFF;
sn_zx_green = OFF;
display_ew(100 - time);? ?? ???//東西繼續倒計時
}
/*************************************************************
南北左轉黃燈亮17s,直行不變,顯示黃燈閃爍倒計時3s
東西不變
*************************************************************/
while(time%100 >= 97 && time<=100)
{
sn_zz_yellow = ON;? ?? ???//南北左轉黃燈亮, 顯示時間3s
sn_zz_red = OFF;
sn_zz_green = OFF;
display_sn_shan(100 - time);
display_ew(100 - time);? ?? ???//東西繼續倒計時
}
}
}
void timer0() interrupt 1
{
count++;
if(count == 4000)
{
time++;
count = 0;
}
if(time > 100)
time = 0;
}
總結
以上是生活随笔為你收集整理的交通灯程序设计C语言,基于MCS-51的交通灯程序设计(c语言控制直行左转,包含程序)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于Java+jsp+servlet的养
- 下一篇: mysql树节点路径,关于mysql:从