python控制51单片机的红绿灯_基于51单片机的红绿灯实现(使用普中科技开发板)...
C語言基礎比較薄弱,紅綠燈的倒計時和切換上,用了三個if()嵌套,總感覺應該有更好的方案,如果你恰巧知道,請教教我,在此謝過。以下是程序部分:
//紅綠燈設計:利用定時器實現LED燈亮滅,數碼管倒計時結束后切換led燈
//P2口控制led燈,38譯碼器選擇數碼管,P0口控制數碼管顯示
//定時器初始化設置,定時器溢出一次為10ms,設置一個變量a=99,a從99-->0,正好100次,也就是1s。
#include"reg52.h"
typedef unsigned int uint;?? ?? //對數據類型進行聲明定義
typedef unsigned char uchar;
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
sbit LED0=P2^7;?? ??? ??? //紅燈
sbit LED1=P2^6;?? ??? ??? //綠燈
sbit LED2=P2^5;?? ??? ??? //黃燈
uchar code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//顯示0~F的值
uchar DisplayData[2];?? ??? ?? //創建一個數組,用于存放倒計時的十位和個位
uchar a=99,flag=0,sec=15;? //a:100次等于1秒(配合定時器使用),flag:對應三種燈 sec:倒計時
//延時函數
void delay(uchar i)
{
while(i--);
}
//數碼管顯示,這里只需要使用兩個數碼管
//通過138譯碼器選擇對應的數碼管
void Digdisplay()
{
uchar i;
for(i=0;i<=1;i++)
{
switch(i)
{
case(0):
LSA=0;LSB=0;LSC=0;break;
case(1):
LSA=1;LSB=0;LSC=0;break;
}
P0=DisplayData[i];?? ??? ?//將當前的時間傳遞給P0,并顯示出來
delay(100);
P0=0x00;?? ??? ??? ??? ? //消隱
}
}
//將當前的時間和smgduan[]內已保存的16進制值對應,接著會通過Digdisplay()顯示
void Datapros()
{
DisplayData[0]=smgduan[sec%10];
DisplayData[1]=smgduan[sec/10];
}
//定時器初始化
void TimerInit()
{
TMOD=0x01;? //選擇定時器0
TH0=0Xd8;?? ?//10毫秒
TL0=0Xf0;
EA=1;
ET0=1;
TR0=1;
}
void red()?? ??? ??? ?? //紅燈倒計時
{
if(flag==0)?? ??? ??? //flag初始值為0,從紅燈開始亮(紅-->綠-->黃)
{
LED2=1;?? ??? ??? ?//黃燈滅
LED0=0;?? ??? ??? ?//紅亮
if(a==0)?? ??? ?//a=0,一秒過去,倒計時sec-1
{
a=99;?? ??? ? //重置a,開始下一秒
sec--;?? ??? ? //倒計時sec-1
if(sec==0)?? ? //sec=0,紅燈結束,綠燈開始
{
flag=1;?? ?? //綠燈的flag
sec=15;?? ?? //給綠燈定時
}
}
}
}
void green()?? ??? ?//綠燈
{
if(flag==1)
{
LED0=1;
LED1=0;
if(a==0)
{
a=99;
sec--;
if(sec==0)
{
flag=3;
sec=3;
}
}
}
}
void yellow()?? ??? ??? ?//黃燈
{
if(flag==3)
{
LED2=0;
LED1=1;
if(a==0)
{
a=99;
sec--;
if(sec==0)
{
flag=0;
sec=15;
}
}
}
}
void Timer() interrupt 1?? ??? //中斷
{
TH0=0Xd8;?? ?//10毫秒
TL0=0Xf0;
a--;?? ??? ??? ? //a的初始值為100,TH0和TL0溢出一次,a-1,a=0時,正好一秒
red();
green();
yellow();
}
void main()
{
TimerInit();
while(1)
{
Datapros();
Digdisplay();
}
}
總結
以上是生活随笔為你收集整理的python控制51单片机的红绿灯_基于51单片机的红绿灯实现(使用普中科技开发板)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 队列的基本操作_如果让你手写个栈和队列,
- 下一篇: python pip gpl_一文了解P