久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
多種模式可調的交通指示燈程序
[打印本頁]
作者:
xiaoxinju
時間:
2017-6-21 11:47
標題:
多種模式可調的交通指示燈程序
對應的電路圖如下:
交通燈.png
(72 KB, 下載次數: 162)
下載附件
2017-6-21 11:47 上傳
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
//共陰數碼管編碼
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
// 南北四向數碼管位選
sbit b1 = P2^0;
sbit b2 = P2^1;
sbit n1 = P2^2;
sbit n2 = P2^3;
sbit d1 = P2^4;
sbit d2 = P2^5;
sbit x1 = P2^6;
sbit x2 = P2^7;
//南北四向12個LED燈
sbit br = P3^0;
sbit by = P3^1;
sbit bg = P3^2;
sbit nr = P3^3;
sbit ny = P3^4;
sbit ng = P3^5;
sbit dr = P3^6;
sbit dy = P3^7;
sbit dg = P1^0;
sbit xr = P1^1;
sbit xy = P1^2;
sbit xg = P1^3;
//設置時間
sbit SET = P1^6;
sbit ADD = P1^5;
sbit MINUS = P1^4;
//蜂鳴器
sbit buzz = P1^7;
uchar Flash_Count=5, Operation_Type=1; //閃爍秒數,通行方向控制 1. B 2.N 3.D 4.X
uchar NBsecond_SET = 30,Nsecond,Bsecond; //南北向通行時間
uchar DXsecond_SET = 20,Dsecond,Xsecond; //東西向通行時間
uchar second_i=1,num=0,RunType=1,flg=0;
uchar key_can; //按鍵值
//菜單變量
uchar menu_1=0,menu_2,key_new=1;
void DelayMS(uint x)
{
uchar i;
while(x--)
for(i=0;i<120;i++);
}
//初始化定時器
void init()
{
EA = 1; //開總中斷
TMOD = 0X11; //定時器0、工作方式1
TH0 = 0x3c;
TL0 = 0xb0; // 50ms
ET0 = 1; //開定時器0中斷
TR0 = 1; //允許定時器0定時
}
//數碼管顯示 second:顯示秒數 tpy: 1. B 2.N 3.D 4.X
void displaySMG(uchar second, uchar tpy)
{
uchar shi,ge;
shi = second/10;
ge = second%10;
if(tpy==1)
{
P2=0xff;
b1 = 0;
P0 = table[shi];
DelayMS(5);
P2=0xff;
b2 = 0;
P0 = table[ge];
DelayMS(5);
}else if(tpy==2)
{
P2=0xff;
n1 = 0;
P0 = table[shi];
DelayMS(5);
P2=0xff;
n2 = 0;
P0 = table[ge];
DelayMS(5);
}else if(tpy==3)
{
P2=0xff;
d1 = 0;
P0 = table[shi];
DelayMS(5);
P2=0xff;
d2 = 0;
P0 = table[ge];
DelayMS(5);
}else if(tpy==4)
{
P2=0xff;
x1 = 0;
P0 = table[shi];
DelayMS(5);
P2=0xff;
x2 = 0;
P0 = table[ge];
DelayMS(5);
}
}
//運行模式1
void modeONE()
{
if(Operation_Type==1)
{
Bsecond = NBsecond_SET-num; // 北向綠燈時間
Nsecond = NBsecond_SET-num; // 南向紅燈
Dsecond = NBsecond_SET + NBsecond_SET-num; // 東向紅燈
Xsecond = 2*NBsecond_SET + DXsecond_SET-num;// 西向紅燈
br = 1;
nr = 0;
ny = 1;
ng = 1;
dr = 0;
dy = 1;
dg = 1;
xr = 0;
xy = 1;
xg = 1;
if(Bsecond<=Flash_Count)
{
if(second_i%10==0)
by = ~by;
bg = 1;
}else
{
bg = 0;
by = 1;
}
if(Bsecond==0)
{
Operation_Type=2;
num=0;
}
displaySMG(Bsecond,1);
displaySMG(Nsecond,2);
displaySMG(Dsecond,3);
displaySMG(Xsecond,4);
}else if(Operation_Type==2)
{
Bsecond = NBsecond_SET + 2*DXsecond_SET-num;// 北向紅燈
Nsecond = NBsecond_SET - num; // 南向綠燈
Dsecond = NBsecond_SET - num; // 東向紅燈
Xsecond = NBsecond_SET + DXsecond_SET-num; // 西向紅燈
br = 0;
by = 1;
bg = 1;
nr = 1;
dr = 0;
dy = 1;
dg = 1;
xr = 0;
xy = 1;
xg = 1;
if(Nsecond<=Flash_Count)
{
if(second_i%10==0)
ny = ~ny;
ng = 1;
}else
{
ng = 0;
ny = 1;
}
if(Nsecond==0)
{
Operation_Type=3;
num=0;
}
displaySMG(Bsecond,1);
displaySMG(Nsecond,2);
displaySMG(Dsecond,3);
displaySMG(Xsecond,4);
}else if(Operation_Type==3)
{
Bsecond = 2*DXsecond_SET-num; // 北向紅燈
Nsecond = 2*DXsecond_SET+NBsecond_SET-num; // 南向紅燈
Dsecond = DXsecond_SET - num; // 東向綠燈
Xsecond = DXsecond_SET - num; // 西向紅燈
br = 0;
by = 1;
bg = 1;
nr = 0;
ny = 1;
ng = 1;
dr = 1;
xr = 0;
xy = 1;
xg = 1;
if(Dsecond<=Flash_Count)
{
if(second_i%10==0)
dy = ~dy;
dg = 1;
}else
{
dg = 0;
dy = 1;
}
if(Dsecond==0)
{
Operation_Type=4;
num=0;
}
displaySMG(Bsecond,1);
displaySMG(Nsecond,2);
displaySMG(Dsecond,3);
displaySMG(Xsecond,4);
}else if(Operation_Type==4)
{
Bsecond = DXsecond_SET - num; // 北向紅燈
Nsecond = DXsecond_SET + NBsecond_SET-num; // 南向紅燈
Dsecond = DXsecond_SET + 2*NBsecond_SET-num; // 東向紅燈
Xsecond = DXsecond_SET - num; // 西向綠燈
br = 0;
by = 1;
bg = 1;
nr = 0;
ny = 1;
ng = 1;
dr = 0;
dy = 1;
dg = 1;
xr = 1;
if(Xsecond<=Flash_Count)
{
if(second_i%10==0)
xy = ~xy;
xg = 1;
}else
{
xg = 0;
xy = 1;
}
if(Xsecond==0)
{
Operation_Type=1;
num=0;
}
displaySMG(Bsecond,1);
displaySMG(Nsecond,2);
displaySMG(Dsecond,3);
displaySMG(Xsecond,4);
}
}
//運行模式2
void modeTWO()
{
if(Operation_Type==1)
{
Bsecond = NBsecond_SET - num; // 北向綠燈時間
Nsecond = NBsecond_SET - num; // 南向綠燈時間
Dsecond = NBsecond_SET - num; // 東向紅燈
Xsecond = NBsecond_SET - num; // 西向紅燈
br = 1;
nr = 1;
dr = 0;
dy = 1;
dg = 1;
xr = 0;
xy = 1;
xg = 1;
if(Bsecond<=Flash_Count)
{
if(second_i%10==0)
{
by = ~by;
ny = ~ny;
}
bg = 1;
ng = 1;
}else
{
bg = 0;
by = 1;
ng = 0;
ny = 1;
}
if(Bsecond==0)
{
Operation_Type=2;
num=0;
}
displaySMG(Bsecond,1);
displaySMG(Nsecond,2);
displaySMG(Dsecond,3);
displaySMG(Xsecond,4);
}else if(Operation_Type==2)
{
Bsecond = DXsecond_SET - num; // 北向綠燈時間
Nsecond = DXsecond_SET - num; // 南向綠燈時間
Dsecond = DXsecond_SET - num; // 東向紅燈
Xsecond = DXsecond_SET - num; // 西向紅燈
br = 0;
by = 1;
bg = 1;
nr = 0;
ny = 1;
ng = 1;
dr = 1;
xr = 1;
if(Dsecond<=Flash_Count)
{
if(second_i%10==0)
{
dy = ~dy;
xy = ~xy;
}
dg = 1;
xg = 1;
}else
{
dy = 1;
dg = 0;
xy = 1;
xg = 0;
}
if(Dsecond==0)
{
Operation_Type=1;
num=0;
}
displaySMG(Bsecond,1);
displaySMG(Nsecond,2);
displaySMG(Dsecond,3);
displaySMG(Xsecond,4);
}
}
/*************定時器0中斷服務程序***************/
void time0_int() interrupt 1
{
TH0 = 0x3c;
TL0 = 0xb0; // 50ms
second_i++;
if (second_i==20) //1s
{
second_i = 1;
num++;
}
if(menu_1 == 0)
{
if(RunType == 1)// 模式1
{
modeONE();
}else if(RunType == 2)// 模式2
{
modeTWO();
}
}
}
/********************獨立按鍵程序*****************/
void key() //獨立按鍵程序
{
key_can = 20; //按鍵值還原
P1 |= 0x70; //對應的按鍵IO口輸出為1
if((P1 & 0x70) != 0x70) //按鍵按下
{
DelayMS(1); //按鍵消抖動
if(((P1 & 0x70) != 0x70) && (key_new == 1))
{ //確認是按鍵按下
key_new = 0;
num=0;
flg=1;
if(SET == 0)
key_can = 1;
if(ADD == 0)
key_can = 2;
if(MINUS == 0)
key_can = 3;
}
}
else
key_new = 1;
}
/**********************設置函數************************/
void key_with()
{
if(key_can == 1) //設置鍵
{
menu_1++;
if(menu_1 == 1) //設置南北向時間
{
menu_2 = 1;
}
if(menu_1 == 2) //設置東西向時間
{
menu_2 = 2;
}
if(menu_1 == 3) //設置運行模式
{
menu_2 = 3;
}
if(menu_1 > 3) //回到正常顯示
{
menu_1 = 0;
flg=0;
}
}
if(menu_2 == 1) //設置南北向時間
{
if(key_can == 2) //加
{
NBsecond_SET+=0x01;
}
if(key_can == 3) //減
{
if(NBsecond_SET != 0x00)
NBsecond_SET -- ;
}
}
if(menu_2 == 2) //設置東西向時間
{
if(key_can == 2) //加
{
DXsecond_SET+=0x01;
}
if(key_can == 3) //減
{
if(DXsecond_SET != 0x00)
DXsecond_SET -- ;
}
}
if(menu_2 == 3) //設置模式
{
if(key_can == 2) //加
{
RunType+=0x01;
}
if(key_can == 3) //減
{
if(RunType > 1)
RunType -- ;
}
}
if(flg==1)
{
if(menu_1==1)
{
displaySMG(NBsecond_SET,1);
displaySMG(NBsecond_SET,2);
}else if(menu_1==2)
{
displaySMG(DXsecond_SET,3);
displaySMG(DXsecond_SET,4);
}else if(menu_1==3)
{
displaySMG(RunType,1);
displaySMG(RunType,2);
displaySMG(RunType,3);
displaySMG(RunType,4);
}
}
}
//主程序
void main()
{
init();
while(1)
{
key(); //按鍵程序
if(key_can < 10|flg==1)
{
key_with();
}
}
}
復制代碼
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
www.久草.com
|
国产一级一片免费播放放a 国产黄色大片
|
一区二区三区四区在线视频
|
日韩综合久久
|
国产成人综合网
|
免费在线小视频
|
一区二区精品在线
|
成人激情视频网
|
黄色福利视频
|
欧美日韩中文字幕在线
|
一区二区精品视频
|
欧美顶级黄色大片免费
|
国产麻豆一区二区
|
一级大片
|
三上悠亚激情av一区二区三区
|
91精品国产99久久久久久红楼
|
成人一级毛片
|
97精品在线
|
狠狠干av
|
日韩免费一区二区
|
www.久久久久
|
四虎色
|
天天澡天天狠天天天做
|
欧美专区在线
|
一级片aa
|
69免费视频
|
美女91网站
|
91精品久久久久久久久
|
亚洲一区二区久久
|
性生活视频网站
|
欧美精品在线视频
|
欧美精品久久久久久久多人混战
|
国产在线视频一区二区
|
国产日本在线观看
|
少妇搡bbbb搡bbb搡澳门
|
成年人免费在线观看
|
日韩免费一级片
|
国产成人aⅴ
|
丁香婷婷激情
|
国产一区二区福利
|
一区二区高清视频
|