久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
單片機(jī)交通燈程序
[打印本頁]
作者:
吧更符合個(gè)
時(shí)間:
2020-7-25 19:25
標(biāo)題:
單片機(jī)交通燈程序
這是寫完的交通燈程序,在單片機(jī)上是能用的。因?yàn)楹芏鄷r(shí)候單片機(jī)上能跑的程序在PROTEUS上不能跑,所以我沒有搭建仿真,也不是用PCB板,只是在實(shí)驗(yàn)板上跑了一下,是能用的。具體實(shí)現(xiàn)的功能有
顯示紅綠燈:初始化狀態(tài)為一向60s,另一向40s開始倒計(jì)時(shí)。然后,40s走完后,再走20s,然后就兩向換倒計(jì)時(shí)的秒數(shù)。
現(xiàn)在有兩個(gè)按鍵有具體功能:一個(gè)是按下停止刷新,再按一次繼續(xù)刷新;一個(gè)是模式切換按鍵,按一下,為緊急模式,再按一下為正常模式,再按一下為特殊模式;重復(fù)按三下后轉(zhuǎn)為初始化模式。代碼在下面,希望對(duì)群友有用。
單片機(jī)源程序如下:
#include<reg52.h>
#include<intrins.h>
typedef unsigned int u16;
typedef unsigned char u8;
u8 digtub[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //用于實(shí)物顯示的0~9
//u8 digtub[]={0xC0,0xf9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; //用于Proteus顯示用的0~9
u8 dat[8];//欲顯示的數(shù)據(jù)
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;//以上三個(gè)是數(shù)碼管位選位
sbit lred=P2^0;//東西方紅燈
sbit lgreen=P3^4;//東西方綠燈
sbit lyellow=P2^7;//東西方黃燈
sbit rred=P2^5; //南北方紅燈
sbit rgreen=P2^1;//南北方綠燈
sbit ryellow=P2^6;//南北向黃燈
sbit KEY1=P3^1; //按鍵1
sbit KEY2=P3^2; //按鍵2
sbit KEY3=P3^3; //按鍵3
sbit KEY4=P3^0;
#define RRED(x) {if((x))rred=0;else{rred=1;}} //南北向紅燈開關(guān)函數(shù)
#define LRED(x) {if((x))lred=0;else{lred=1;}} //東西向紅燈開關(guān)函數(shù)
#define RGREEN(x) {if((x))rgreen=0;else{rgreen=1;}} //南北向綠燈開關(guān)函數(shù)
#define LGREEN(x) {if((x))lgreen=0;else{lgreen=1;}} //東西向綠燈開關(guān)函數(shù)
#define RETURN_RYELLOW {ryellow=~ryellow;} //南北向黃燈閃爍函數(shù)
#define RETURN_LYELLOW {lyellow=~lyellow;} //東西向黃燈閃爍函數(shù)
sbit L1=P3^4;
sbit L2=P3^5;
void key_init();
void display();
void vestmode();
/********************************************************************************************
************************定時(shí)初始化函數(shù)**********************************************************/
void timer_init()
{
TMOD|=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
EA=1;
ET0=1;
}
/*********************************************************************************************************
************************以上是定時(shí)初始化函數(shù)**********************************************************/
/***************************************************************************************************
************************以下是延時(shí)函數(shù)***************************************************************/
void delay(u16 ms)
{
u16 i;
for(ms;ms>0;ms--)
{
for(i=0;i<120;i++);
}
}
/***************************************************************************************************
************************以上是延時(shí)函數(shù)***************************************************************/
u16 opendis;
void main()
{
timer_init();
while(1)
{
if(!opendis)display();
key_init();
vestmode();
}
}
bit givenum;//開關(guān)紅綠燈秒數(shù)賦值的標(biāo)志位
u16 staticgreen=30; //固定綠燈值可通過按鍵修改
u16 staticred=10; //固定紅燈值可通過按鍵修改
u8 NSNUM[3]={40,20,60}; //南北方向紅綠燈秒數(shù)[1]紅燈;[2]右轉(zhuǎn)紅燈;[3]綠燈
u8 EWNUM[3]={60,20,40}; //東西方向紅綠燈秒數(shù)[1]綠燈;[2]紅燈;[3]右轉(zhuǎn)紅燈
/**********************
這個(gè)是定時(shí)中斷函數(shù)************/
void time0() interrupt 1
{
static u16 num=0;
static u8 ewnum;//東西方向60s綠燈
static u8 nsnum;//南北方向40s紅燈
static u16 nsflag=0;//南北向黃燈次數(shù)或轉(zhuǎn)換紅綠方向的標(biāo)志
static u16 ewflag=0;//東西向黃燈次數(shù)或轉(zhuǎn)換紅綠方向的標(biāo)志
u16 Rgreen,Lgreen; //Rgreen南北向綠燈滅標(biāo)志 ;Lgreen東西向綠燈滅標(biāo)志;lreturn右轉(zhuǎn)紅燈值(方便修改)
if(!givenum){ewnum=EWNUM[0];nsnum=NSNUM[0];}//二次賦值,為了方便修改
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
num++; //num=20時(shí)剛好計(jì)數(shù)是1s。
if(num==20)
{
givenum=1;
num=0;
ewnum--;
nsnum--;
if(nsnum==0){if(nsflag>=2){nsflag=0;RGREEN(0);}else{nsflag++;}nsnum=NSNUM[nsflag];}//南北向數(shù)碼管循環(huán)顯示。
if(ewnum==0){if(ewflag>=2){ewflag=0;}else{ewflag++;}ewnum=EWNUM[ewflag];}//東西向數(shù)碼管循環(huán)顯示。
if(nsflag==0||nsflag==1){RRED(1);}//南北向直行或右轉(zhuǎn)時(shí)的紅燈
if(nsnum>0&&nsnum<5){
RETURN_RYELLOW;
RRED(0);RGREEN(0);Rgreen=1;//南北向紅綠燈都滅
}//大于0小于5時(shí)黃燈
if(nsflag==2&&!Rgreen){RGREEN(1);}//南北綠燈
if(ewflag==0||ewflag==1){LRED(1);}//東西向直行或右轉(zhuǎn)時(shí)的紅燈
if(ewnum>0&&ewnum<5){
RETURN_LYELLOW;
LRED(0);LGREEN(0);Lgreen=1;//東西向紅綠燈都滅
}//大于0小于5時(shí)黃燈
if(ewflag==2&&!Lgreen){LGREEN(1);}//南北綠燈
dat[0]=digtub[ewnum/10];//東西方向紅綠燈的十位
dat[1]=digtub[ewnum%10];//東西方向紅綠燈的個(gè)位
dat[2]=digtub[nsnum/10];
dat[3]=digtub[nsnum%10];
dat[6]=digtub[ewnum/10];//東西方向紅綠燈的十位
dat[7]=digtub[ewnum%10];//東西方向紅綠燈的個(gè)位
dat[4]=digtub[nsnum/10];
dat[5]=digtub[nsnum%10];
}
}
/********************上面是定時(shí)中斷函數(shù)*******************
*********************************************/
/*這個(gè)是按鍵程序*******************************************************
***************************************************************************/
static u16 modesign[6]={1,2,3};//模式選擇標(biāo)志
static u16 keymode;
static u16 ewgreen;
u16 ll;
void key_init()
{
static u16 i=0;
if(KEY1==0)//開關(guān)數(shù)碼管顯示按鍵
{
delay(100);
if(KEY1==0){TR0=~TR0;}
while(!KEY1);
}
if(KEY2==0) //切換模式按鍵
{
delay(100);
if(KEY2==0){
keymode=modesign[i++];
if(i>3){i=0;}
}
while(!KEY2);
}
if(KEY3==0)//后臺(tái)修改紅綠燈值,
{
delay(100);
if(KEY3==0);
while(!KEY3);
}
if(KEY4==0)//后臺(tái)修改紅綠燈值,
{
delay(100);
if(KEY4==0);
while(!KEY4);
}
}
/***********************************************************************************************/
/***************************************************************************************************/
void display()
{
u16 i;
for(i=0;i<8;i++)
{
switch(i)
{
case 0:LSA=0;LSB=0;LSC=0;P0=dat[1];break; //第一個(gè)數(shù)碼管
case 1:LSA=1;LSB=0;LSC=0;P0=dat[0];break; //第二個(gè)數(shù)碼管
case 2:LSA=0;LSB=1;LSC=0;P0=dat[5];break;//第三個(gè)數(shù)碼管
case 3:LSA=1;LSB=1;LSC=0;P0=dat[4];break; //第四個(gè)數(shù)碼管
case 4:LSA=0;LSB=0;LSC=1;P0=dat[7];break; //第五個(gè)數(shù)碼管
case 5:LSA=1;LSB=0;LSC=1;P0=dat[6];break; //第六個(gè)數(shù)碼管
case 6:LSA=0;LSB=1;LSC=1;P0=dat[3];break; //第七個(gè)數(shù)碼管
case 7:LSA=1;LSB=1;LSC=1;P0=dat[2];break; //第八個(gè)數(shù)碼管
}
}
}
/***************************************************************************************************
****************************************************************************************************
***********************************************************************************************/
void vestmode() //切換模式按鍵:keymode:1 緊急模式 ; 2 正常模式;3 特殊模式
{
if(keymode==1){
EWNUM[0]=45;EWNUM[1]=30;EWNUM[2]=15;
NSNUM[0]=30;NSNUM[1]=15;NSNUM[2]=45;
givenum =0;
keymode=0;
}
if(keymode==2){
EWNUM[0]=60;EWNUM[1]=40;EWNUM[2]=20;
NSNUM[0]=40;NSNUM[1]=20;NSNUM[2]=60;
givenum =0;
keymode=0;
}
if(keymode==3) //特殊模式后,繼續(xù)按3次,會(huì)初始化到正常模式
{
opendis=~opendis;
keymode=0;
}
}
/***************************************************************************************************
****************************************************************************************************
***********************************************************************************************/
復(fù)制代碼
所有程序51hei提供下載:
交通燈.rar
(71.28 KB, 下載次數(shù): 8)
2020-7-25 19:25 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
亚洲日本欧美日韩高观看
|
久久精品中文
|
国产精品不卡一区
|
亚洲国产精品久久久
|
亚洲 中文 欧美 日韩 在线观看
|
成年免费大片黄在线观看岛国
|
av免费在线播放
|
久久久激情
|
91视视频在线观看入口直接观看
|
在线免费观看a级片
|
欧美中文字幕
|
人妖videosex高潮另类
|
天天操综合网
|
免费一级毛片
|
国产成人福利视频在线观看
|
一本一道久久a久久精品蜜桃
|
国产精品久久久久久福利一牛影视
|
伊人伊人
|
日本不卡一区二区三区
|
国产1区
|
久久久久久久久久久福利观看
|
五月天婷婷综合
|
久久久精品一区二区三区四季av
|
日韩电影一区
|
美女黄视频网站
|
国产我和子的乱视频网站
|
日韩在线不卡
|
美女二区
|
国产成人福利
|
日韩一区二区三区在线播放
|
亚洲精品一级
|
九九久久久久久
|
亚洲精品成人
|
日本免费一区二区三区四区
|
精品国产精品三级精品av网址
|
国产免费av网
|
日韩高清中文字幕
|
精品国产久
|
日韩欧美视频网站
|
国产高清一区二区
|
亚洲国产一区二区在线
|