位定义是依次定义适用的 便于在后面控制时候使用,思路是基于点亮LED的高低电平控制,所使用的开发板默认都有上拉电阻,所以底电位亮灯。延时程序使用小精灵自动生成,极大地提高效率,通过在main之前定义编辑后直接调用 结构极大地简化,也便于明了的修改
- #include "reg52.h"
- typedef unsigned char u8 ; //定义变量参//
- typedef unsigned int u16 ;
- sbit D1=P0^0; //A方向行道红灯
- sbit D2=P0^1;//A方向行道绿灯
- sbit D3=P0^2;//A方向红灯
- sbit D4=P0^3; //A方向黄灯
- sbit D5=P0^4; //A方向绿灯
- sbit D6=P0^5; //B方向红灯
- sbit D7=P0^6; //B方向黄灯
- sbit D8=P0^7; //B方向绿灯
- sbit D9=P2^0; //B方向行道红灯
- sbit D0=P2^1; //B方向行道绿灯
- void delay5s() //误差 0us
- {
- unsigned char a,b,c;
- for(c=165;c>0;c--)
- for(b=100;b>0;b--)
- for(a=150;a>0;a--);
- }
- void delay30s() //误差 0us
- {
- unsigned char a,b,c,n;
- for(c=254;c>0;c--)
- for(b=232;b>0;b--)
- for(a=253;a>0;a--);
- for(n=2440;n>0;n--);
- }
- void jiaotongdeng()
- {
- D1=0;D2=1;D3=0;D4=1;D5=1;D6=1;D7=1;D8=0;D9=1;D0=0;
- delay30s();
- D1=0;D2=1;D3=1;D4=~D4;D5=1;D6=1;D7=~D7;D8=1;D9=1;D0=~D0;
- delay5s();
- D1=1;D2=0;D3=1;D4=1;D5=0;D6=0;D7=1;D8=1;D9=0;D0=1;
- delay30s();
- D1=0;D2=1;D3=1;D4=~D4;D5=1;D6=1;D7=~D7;D8=1;D9=1;D0=~D0;
- delay5s();
- }
- void main()
- {
- while(1)
- {
- jiaotongdeng();
- }
- }
复制代码
|