標題: 單片機交通燈設計源碼 [打印本頁]
作者: 51hei小山 時間: 2016-11-2 11:37
標題: 單片機交通燈設計源碼
/**************************************************
實驗名:交通燈設計
實驗內(nèi)容:利用中斷,定時/計數(shù)器,數(shù)碼管和led燈進行交通燈的設計
*************************************************/
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit wei1=P2^4; //定義位選 0
sbit wei2=P2^5; //1
sbit wei3=P2^6; //2
sbit wei4=P2^7; //3
sbit green_we=P1^2; //定義交通燈綠東西
sbit green_ns=P1^3; //定義交通燈綠南北
sbit red_we=P1^0; //定義交通燈紅東西
sbit red_ns=P1^1; //定義交通燈紅南北
sbit yellow_we=P1^4; //定義交通燈黃東西
sbit yellow_ns=P1^5; //定義交通燈黃南北
uchar num,num1,shi_we,shi_ns,ge_we,ge_ns;
uint xianshi_we,xianshi_ns;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f}; //定義數(shù)值0,1,2....9
void delayms(uint xsm) //延時程序
{
uint i,j;
for(i=xsm;i>0;i--)
for(j=110;j>0;j--);
}
void display(uchar shi_we,uchar ge_we,ucharshi_ns,uchar ge_ns) //定義數(shù)碼管函數(shù)
{
wei1=1;
wei2=0;
wei3=0;
wei4=0;
P0=table[shi_we];
delayms(5);
wei1=0;
wei2=1;
wei3=0;
wei4=0;
P0=table[ge_we];
delayms(5);
wei1=0;
wei2=0;
wei3=1;
wei4=0;
P0=table[shi_ns];
delayms(5);
wei1=0;
wei2=0;
wei3=0;
wei4=1;
P0=table[ge_ns];
delayms(5);
}
void main()
{
num=0;
num1=0;
xianshi_we=99;
xianshi_ns=99;
shi_we=9;
ge_we=9;
shi_ns=9;
ge_ns=9;
TMOD=0x51; //設置定時器0和計數(shù)器1為工作方式1
TH0=(65536-46080)/256; //設置初值
TL0=(65536-46080)%256;
TH1=(65536-46080)/256;
TL1=(65536-46080)%256;
EA=1; //開總中斷
ET0=1; //開定時器0中斷
ET1=1; //開定時器1中斷
TR0=1; //啟動定時器0
TR1=1; //啟動定時器1
P1=0xff; //led燈全滅
P1=0xf6; //定義東西亮紅燈,南北亮綠燈;
while(1)
{
display(shi_we,ge_we,shi_ns,ge_ns);
if(num1==1140)
{
P1=0xde;//定義東西亮紅燈,南北亮黃燈;
}
if(num1==1200)
{
P1=0xf9;//定義東西亮綠燈,南北亮紅燈;
xianshi_we=60;
xianshi_ns=60;
}
if(num1==2340)
{
P1=0xed;//定義東西亮黃燈,南北亮紅燈;
}
if(num1==2400)
{
num1=0;
xianshi_we=60;
xianshi_ns=60;
P1=0xf6;//定義東西亮紅燈,南北亮綠燈;
}
}
}
void T0_time()interrupt 1
{
TH0=(65536-46080)/256;
TL0=(65536-46080)%256;
num++;
if(num%20==0)
{
num=0;
xianshi_we--;
xianshi_ns--;
shi_we=xianshi_we/10;
ge_we=xianshi_we%10;
shi_ns=xianshi_ns/10;
ge_ns=xianshi_ns%10;
}
}
void T1_count() interrupt 3
{
TH1=(65536-46080)/256;
TL1=(65536-46080)%256;
num1++;
}
歡迎光臨 (http://www.torrancerestoration.com/bbs/) |
Powered by Discuz! X3.1 |