欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
單片機數碼管系統交通燈程序
[打印本頁]
作者:
zhoushiling
時間:
2019-10-3 10:55
標題:
單片機數碼管系統交通燈程序
甲乙主從通道實現,另外實現調節時間和暫停運行
單片機源程序如下:
/***********************************************************
名稱:基于AT89S52數碼管系統交通燈程序
要求:紅祿燈燈電路,數碼管電路,獨立式鍵盤電路,蜂鳴器電路,統一交通燈設計
作者:黃*
時間:2019年9月1日
電路描述:S1到S5一鍵一功能;S1開始,S2暫停,S3調整時間加,S4調整時間減,S5進入緊急狀態;
************************************************************/
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit S1=P1^0; //開始運行按鍵
sbit S2=P1^1; //暫停運行按鍵
sbit S3=P1^2; //調整時間加按鍵
sbit S4=P1^3; //調整時間減按鍵
sbit S5=P1^4; //進入緊急狀態按鍵
sbit red1=P3^2; //甲通道紅燈
sbit green1=P3^3; //甲通道祿燈
sbit yellow1=P3^4; //甲通道黃燈
sbit red2=P3^5; //乙通道紅燈
sbit green2=P3^6; //乙通道祿燈
sbit yellow2=P3^7; //乙通道黃燈
sbit beep=P3^1; //蜂鳴器報警控制端
uchar code discode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; //送段碼0-9
uchar code discode1[]={0x92,0x92,0x88,0x8C,0x8C,0xC0,0x87,0x92}; //送段碼STOP PASS
uchar disbitcode[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //送位碼
uchar disbuf[2]={0,0}; //顯示緩沖區
uchar cent,second1=60,second=60,second2=30,a;
/*函數申明*/
void display(void);
void ini(void);
void t0(void);
void stop(void);
/*************延時程序**************/
void delay(uint m)
{
while(--m);
}
/*************初始化程序**************/
void ini(void)
{
TMOD=0x01;
TH0=(65536-46082)/256;
TL0=(65536-46082)%256;
ET0=1;
EA=1;
}
/*************顯示緊急通道程序**************/
void stop(void)
{
uchar i;
for(i=0;i<8;i++)
{
P0=discode1[i];
P2=disbitcode[i];
delay(100);
P2=0X00;
}
}
/*************顯示程序**************/
void display(void)
{
uchar i;
for(i=0;i<2;i++)
{
P0=discode[disbuf[i]];
P2=disbitcode[i];
delay(100);
P2=0X00;
}
}
/*************中斷程序**************/
void t0(void) interrupt 1 using 0 //用第0組寄存器
{
cent++;
if(cent==20)
{
cent=0;
second--;
if(second==0&&a==0)
{
second=3;
a=1;
}
if(second==0&&a==1)
{
second=second2;
a=2;
}
if(second==0&&a==2)
{
second=3;
a=3;
}
if(second==0&&a==3)
{
second=second1;
a=0;
}
}
disbuf[0]=second%10; //更新顯示緩沖區
disbuf[1]=second/10;
TH0=(65536-46082)/256;
TL0=(65536-46082)%256;
}
/*************鍵掃描程序**************/
uchar keyscan()
{
uchar tmp; //列號,行號
P1=0xff; //發全行0掃描碼
if((P1&0xff)!=0xff) //若有鍵按下
{
delay(1000); // 延時去抖
if((P1&0xff)!=0xff) //有鍵按下
{
tmp=(P1&0xff);
do{}while((P1&0xff)!=0xff);
tmp=~tmp;
return (tmp); //還回鍵值
}
}
return (0); //無鍵按下,還回0
}
/*************主程序**************/
void main(void)
{
uchar v,b=0;
ini();
v=keyscan();
while(v==0)
{
P0=0X0C;
P2=0X01;
P3=0XFF;
v=keyscan();
}
if(v==1||v==16)
{
while(1)
{
switch(v)
{
case 1:
TR0=1;
while(v==1||v==0)
{
if(a==0)
{
loop1: yellow2=1;
red1=1;
green1=0;
red2=0;
}
if(a==1)
{
yellow1=0;
green1=1;
delay(100);
yellow1=1;
}
if(a==2)
{
loop2: red1=0;
red2=1;
green2=0;
yellow1=1;
}
if(a==3)
{
green2=1;
yellow2=0;
delay(100);
yellow2=1;
}
display();
v=keyscan(); //調鍵掃描程序
}
break;
case 2:
while(v==2||v==0)
{
TR0=0;
display();
v=keyscan();
}
break;
case 4:
b++;
v=keyscan();
break;
case 8:
if(b%2==0)
{
second1++;
if(second1==100)
second1=0;
disbuf[0]=second1%10; //更新顯示緩沖區
disbuf[1]=second1/10;
}
else
{
second2++;
if(second2==100)
second2=0;
disbuf[0]=second2%10; //更新顯示緩沖區
disbuf[1]=second2/10;
}
display();
v=keyscan();
break;
case 16:
if(b%2==0)
{
second1--;
if(second1==0)
second1=99;
disbuf[0]=second1%10; //更新顯示緩沖區
disbuf[1]=second1/10;
}
else
{
second2--;
if(second2==0)
second2=99;
disbuf[0]=second2%10; //更新顯示緩沖區
disbuf[1]=second2/10;
}
display();
v=keyscan();
break;
case 32:
while(v==32||v==0) /*顯示八個8*/
{
P3=0XFF;
red1=0;
red2=0;
beep=0;
stop();
delay(10000);
beep=1;
v=keyscan(); //調鍵掃描程序
}
break;
case 64:
second=60;
P3=0XFF;
a=0;
goto loop1;
break;
case 128:
second=30;
P3=0XFF;
a=2;
goto loop2;
break;
}
display();
v=keyscan();
}
}
}
復制代碼
所有資料51hei提供下載:
交通燈.zip
(29.72 KB, 下載次數: 8)
2019-10-3 10:53 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1