最近做了一個關最近做了一個關于8155模擬交通燈的運行系統,寫的不好,還有很多不足,有的地方還不完善,請大家多多指教。
電路原理圖如下:
交通燈仿真.jpg
單片機源程序如下:
- #include<reg52.h>
- # include <absacc.h>
- #define uchar unsigned char //定義為uchar類型
- #define uint unsigned int //定義為uint類型
- # define COM XBYTE[0XFE00] //控制字地址(總控制,決定了PA/B/C是寫還是讀等)
- # define PA XBYTE[0XFE01] //控制PA地址(總控制寫的是讀時,里面存的是讀的值;
- // 寫的是寫時,里面要寫入控制值)
- # define PB XBYTE[0XFE02] //控制PB地址
- # define PC XBYTE[0XFE03] //控制PC地址
- sbit g = P2^1;
- sbit s = P2^2;
- sbit eg = P2^3;
- sbit ws = P2^4;
- //sbit Key_N = P1^4; //獨立按鍵
- //sbit Key_S = P1^5;
- //sbit Key_W = P1^6;
- //sbit Key_E = P1^7;
- sbit KEYA = P1^4;
- sbit KEYB = P1^5;
- uint ge,shi; //定義全局變量
- uint m = 30;
- uint n;
- uint num;
- /*交通燈的數值*/
- uchar lcd1 = 10; //倒計時初始值為25用于改變
- uchar lcd2 = 15; //的倒計時初始值為30用于改變
- uchar lcd11; //倒計時
- uchar lcd22; //倒計時
- uchar change1; //LCD1紅綠燈轉換
- uchar yellow1 = 3;
- /*一些輔助標志位的聲明*/
- uchar code smguan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //數碼管顯示0~9
- uchar t=3;
- uchar sign = 0;
- uchar time_Count; //進行計時
- void delay(uint t)
- {
- while(t--);
- }
- void Digital(uint ge,uint shi) //數碼管顯示
- {
- PA = smguan[ge];
- s = 1;
- delay(500);
- s = 0;
- PA = smguan[shi];
- g = 1;
- delay(500);
- g = 0;
- PB = smguan[ge];
- eg = 1;
- delay(500);
- eg = 0;
- PB = smguan[shi];
- ws = 1;
- delay(500);
- ws = 0;
- }
-
- void Traffic_lights()
- {
- if(t == 3)
- {
- P1 = 0x01;
- if(m == 0)
- {
- m = 3;
- t = 2;
- }
- }
- if(t == 2)
- {
- P1 = 0x02;
- if(m == 0)
- {
- m = 30;
- t = 1;
- }
- }
-
- if(t == 1)
- {
- P1 = 0x04;
- if(m == 0)
- {
- m = 3;
- t = 0;
- }
- }
- if(t == 0)
- {
- P1 = 0x02;
- if(m == 0)
- {
- m = 30;
- t = 3;
- }
- }
- }
- void INIT()
- {
- IT0=1;
- IT1=1;
- EX0=1;
- EX1=1;
- EA=1;
- }
復制代碼
|