|
#include<reg51.h> //單片機(jī)頭文件聲明
unsigned char code tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
//定義無符號數(shù)組,定義的數(shù)據(jù)要放在ROM里面
sbit sl=P2^7;
sbit sh=P2^6;
sbit xl=P2^2;
sbit xh=P2^3;
sbit zh=P2^5;
sbit zl=P2^0;
sbit yl=P2^4;
sbit yh=P2^1;
char count=20; //定時(shí)時(shí)間取10ms,循環(huán)100次即為1s
unsigned char sxs=6; //10秒上下,為上下綠燈亮?xí)r倒計(jì)數(shù)
unsigned char zys=6; //10秒左右,為左右綠燈亮?xí)r倒計(jì)數(shù)
bit flag=1; //方向標(biāo)志,1->上下綠燈亮 0->zy
void delay(char x) //延遲函數(shù),通過for循環(huán)進(jìn)行延時(shí)
{
char a,b;
for(a=x;a>0;a--)
for(b=100;b>0;b--);
}
void display() //數(shù)碼管顯示函數(shù)
{
if(flag==1) //如果方向標(biāo)志為上下
{
P1=tab[sxs/10];
P0=tab[sxs%10];
}
if(flag==0) //方向標(biāo)志假如為左右
{
P1=tab[zys/10];
P0=tab[zys%10];
}
}
void lights() //小燈函數(shù)
{
if(flag==1) //判斷方向是否為上下
{
sl=xl=zh=yh=1;
sh=xh=zl=yl=0;
}
if(flag==0) //判斷方向是否為左右
{
sl=xl=zh=yh=0;
sh=xh=zl=yl=1;
}
}
initial() //初始化函數(shù)
{
TMOD=0x01; //設(shè)置定時(shí)器為工作方式1
TH0=15536/256; //在晶振頻率12MHz下,賦初值
TL0=15536%256;
EA=1; //允許CPU中斷
TR0=1; //啟動(dòng)定時(shí)器T0
ET0=1; //允許定時(shí)器T0中斷
}
main() //主函數(shù)
{
initial(); //調(diào)用初始化函數(shù)
while(1) //無限循環(huán),用于循環(huán)點(diǎn)亮小燈和顯示數(shù)碼管
{
display(); //調(diào)用數(shù)碼管顯示函數(shù)
lights(); //調(diào)用小燈函數(shù)
}
}
t0_int() interrupt 1 //中斷函數(shù),T0中斷
{
TH0=15536/256;
TL0=15536%256;
count--; //計(jì)數(shù)器減1
if(count==0) //判斷計(jì)數(shù)器是否計(jì)滿100次
{
count=20; //定時(shí)時(shí)間重新取值
if(flag==1) //假如方向標(biāo)志時(shí)上下
{
sxs--; //時(shí)間倒計(jì)時(shí)
if(sxs==0) //左數(shù)碼管顯示0
{
flag=0; //方向標(biāo)志取反,方向?yàn)樽笥?br />
sxs=8; //右數(shù)碼管取值
}
}
if(flag==0) //假如方向標(biāo)志時(shí)左右
{
zys--; //時(shí)間倒計(jì)時(shí)
if(zys==0) //右數(shù)碼管顯示0
{
flag=1; //方向標(biāo)志取反,方向?yàn)樯舷?br />
zys=6; //左數(shù)碼管取值
}
}
}
}
|
評分
-
查看全部評分
|