本帖最后由 UChiha0 于 2015-11-13 00:14 编辑
设计一个十字路口的信号灯:要求:
使用红绿黄二极管各两个表示十字路相交叉方向的信号
使用红绿二极管各两个表示人行道的红绿灯信号
使用两个数码管倒计时,红灯15秒,绿灯9秒
》》》》》》》》》》》》示意图《《《《《《《《《《《《《
***************************************************************************
》》》》》》》》》》》》》》电路图《《《《《《《《《《《《《《
//含.DSN和.hex文件
****************************************************** 第一行和第三行分别为秒数,以15+9=24为一个周期进行轮流点灯。第二行和第四行分别为对应状态的P值(10进制)
___________________________________________________________________________________________________________________
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | | 1 | 4 | 2 | 高位 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | | 2 | 1 | 4 | 低位 | | | | | | | | | | | | | | | | | | | | | | | | | | | 12 | 41 | 24 | |
____________________________________________________________________________________________________________________
Keil_c源程序
- #include
- #define uchar unsigned char
- void delayms(unsigned int ms);
- void timer(unsigned int s);
- void TimerG();
- uchar i;
- uchar GeWei[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
- uchar ShiWei[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07};
- void main()
- {
- while(1)
- {
- TimerG();
- }
- }
- void TimerG()
- {
- unsigned int gewei;
- unsigned int shiwei;
- unsigned int k;
- unsigned int j;
- unsigned int m;
- //第一阶段
- for(k=15;k>=7;k--)
- {
- gewei=k%10;
- shiwei=k/10;
- //闪烁 使数字静止
- for(j=0;j<100;j++)
- {
- P0=0x12;//北向路口灯状态
- P1=0x9A; //个位
- P2=~(GeWei[gewei]);//西向倒计时计数器
- m=k-6;
- P3=~(GeWei[m]);//南向倒计时计数器
- delayms(5);
- P1=0x95; //十位
- P2=~(ShiWei[shiwei]);//同上
- P3=~0x3f;
- delayms(5);
- }
- }
- //第二阶段
- for(k=6;k>=1;k--)
- {
- gewei=k%10;
- shiwei=k/10;
- for(j=0;j<100;j++)
- {
- P0=0x41;
- P1=0x5A;
- P2=~(GeWei[gewei]);
- m=(k+9)%10;
- P3=~(GeWei[m]);
- delayms(5);
- P0=0x01;//黄灯闪
- P1=0x55;
- P2=~(ShiWei[shiwei]);
- P3=~(ShiWei[(k+9)/10]);
- delayms(5);
- }
- }
- //第三阶段
- for(k=9;k>=1;k--)
- {
- gewei=k%10;
- shiwei=k/10;
- for(j=0;j<100;j++)
- {
- P0=0x24;
- P1=0x6A;
- P3=~(GeWei[gewei]);
- P2=P3;
- delayms(5);
- P0=0x20;//黄灯闪
- P1=0x65;
- P3=~(ShiWei[shiwei]);
- P2=P3;
- delayms(5);
- }
- }
- for(j=0;j<100;j++)
- {
- P1=0x0A;
- P2=~(0x3f);
- P3=P2;
-
- delayms(5);
- P1=0x05;
- P2=~(0x3f);
- P3=P2;
- delayms(5);
- }
- }
- //延时函数
- void delayms(unsigned int ms)
- {
- unsigned char i;
- while(ms--)
- {
- for(i=0;i<120;i++);
- }
- }
复制代码
多多指教,大家一起交流进步,不足之处我会继续完善!! :)
|