|
- // 模擬交通信號(hào)燈的程序
- // 典型的51紅綠燈程序,用89C51,S51, 分別定義了 P0.0,0.1,0.2 ,P0.4,0.5,0.6 接外部輸出,會(huì)自動(dòng)運(yùn)行。
- #include <reg52.h>
- sbit RED1 =P0^0; // 南北交通信號(hào)燈
- sbit YELLOW1=P0^1;
- sbit GREEN1 =P0^2;
- sbit RED2 =P0^4; // 東西交通信號(hào)燈
- sbit YELLOW2=P0^5;
- sbit GREEN2 =P0^6;
- /*------------------------------------------------
- uS延時(shí)函數(shù),含有輸入?yún)?shù) long dly,無返回值
- long 是定義無符號(hào)字符變量,其值的范圍是
- -2147483648~+2147483647 這里使用晶振12M,精確延時(shí)請(qǐng)使用匯編,大致延時(shí)
- 長度如下 T=dly x 2 + 5 uS
- ------------------------------------------------*/
- void delay(long dly)
- {
- while(dly--);
- }
- void main()
- {
- int i,x,y,z;
- while(1)
- {
- RED1=0;YELLOW1=1;GREEN1=1;//南北紅
- RED2=1;YELLOW2=1;GREEN2=0;//東西綠
- x=10,y=7,z=3;
- for(i=0;i<10;i++)
- { //2位的數(shù)碼管模塊 進(jìn)行硬件譯碼
- P2=((x/10)<<4)+x%10; //nanbeihong 驅(qū)動(dòng)數(shù)碼管顯示 要顯示的數(shù)字的BCD碼數(shù)組
- x--;
- if(y>0)
- { //2位的數(shù)碼管模塊 送入的 BCD譯碼器 轉(zhuǎn)碼
- P1=((y/10)<<4)+y%10; //dongxilv 驅(qū)動(dòng)數(shù)碼管顯示
- y--;
- delay(15000); //大致延時(shí)30mS
- }
- else
- {
- RED2=1;YELLOW2=0;GREEN2=1; //dongxihuang
- P1=((z/10)<<4)+z%10; // 驅(qū)動(dòng)數(shù)碼管顯示 要顯示的數(shù)字的BCD碼數(shù)組
- RED2=1;YELLOW2=0;GREEN2=1;
- delay(7500); //大致延時(shí)15mS
- RED2=1;YELLOW2=1;GREEN2=1;
- delay(7500); //大致延時(shí)15mS
- z--;
- }
- }
-
- RED1=1;YELLOW1=1;GREEN1=0;//南北綠
- RED2=0;YELLOW2=1;GREEN2=1;//東西紅
- x=18,y=15,z=3;
- for(i=0;i<18;i++) //dongxihong
- {
- P1=((x/10)<<4)+x%10; //驅(qū)動(dòng)數(shù)碼管顯示
- x--;
- if(y>0)
- {
- P2=((y/10)<<4)+y%10; //nanbeilv 驅(qū)動(dòng)數(shù)碼管顯示
- y--;
- delay(15000); //大致延時(shí)30mS
- }
- //nanbeihuang
- else
- {
- RED1=1;YELLOW1=0;GREEN1=1;
- P2=((z/10)<<4)+z%10; // 驅(qū)動(dòng)數(shù)碼管顯示
- RED1=1;YELLOW1=0;GREEN1=1;
- delay(7500); //大致延時(shí)15mS
- RED1=1;YELLOW1=1;GREEN1=1;
- delay(7500); //大致延時(shí)15mS
- z--;
- }
- }
-
- }
- }
復(fù)制代碼 |
|