目的: 单片机扩展82C55 芯片 用作 输出口,控制 12只 发光二极管亮灭, 模拟对交通灯的管理。
// 执行程序,初始化状态, 4个红灯全亮后, 东西路口的绿灯亮,南北路口的红灯亮,东西方向通车
// 延迟一段时间后, 东西路口绿灯熄灭, 黄灯开始闪烁,闪烁几次后,东西路口红灯亮,同时南北路口绿灯亮,南北通车。
// 延迟一段时间,南北路口的绿灯熄灭, 黄灯开始闪烁,再切换到东西路口绿灯亮,重复上述过程
仿真电路图:
参考代码:
1 2 3 #include<reg52.h> 4 #include<absacc.h> 5 #define uint16 unsigned int 6 #define uchar8 unsigned char 7 8 #define LED1 0x01 9 #define LED2 0x02 10 #define LED3 0x04 11 #define LED4 0x08 12 13 #define LED5 0x10 14 #define LED6 0x20 15 #define LED7 0x40 16 #define LED8 0x80 17 18 19 #define LED9 0x01 20 #define LED10 0x02 21 #define LED11 0x04 22 #define LED12 0x08 23 24 #define PA XBYTE[0x0000] // PA 、PB 、PC 及 命令端口地址定义 ,看图分析,他妈的看不懂啊 25 #define PB XBYTE[0x0001] 26 #define PC XBYTE[0x0002] 27 #define COM XBYTE[0x0003] 28 29 void DelayMs(uint16 ms) 30 { 31 uchar8 i; 32 while(ms--) for(i=0;i<120;i++); 33 34 } 35 36 void main() 37 { 38 uchar8 i; 39 COM = 0x80; // 设置 8255 芯片的工作方式、 PA、PB 口 均为 方式0 40 41 for(i=0;i<5;i++) // 输出 四个红灯都亮,到底怎么回事,调试很凌乱啊,最好自己做一个实物 42 { 43 PA=0xFF & (~LED3)&(~LED6); 44 PB=0xFF & (~LED12)&(~LED9); 45 DelayMs(500); 46 } 47 48 while(1) 49 { 50 // 东西方向绿灯亮,南北方向红灯亮 51 for(i=0;i<10;i++) 52 { 53 PA=0xff&(~LED1)&(~LED6)&(~LED7); 54 PB=0xff&(~LED12); 55 DelayMs(500); 56 } 57 58 59 // 东西方向绿灯灭,黄灯开始闪烁, 南北方向红灯亮, 60 for(i=0;i<5;i++) 61 { 62 PA=0xff&(~LED2)&(~LED6)&(~LED8); 63 PB=0xFF&(~LED12); 64 DelayMs(300); 65 66 PA=0xFF &(~LED6); 67 PB=0xFF &(~LED12); 68 DelayMs(300); 69 } 70 71 // 东西方向红灯亮,南北方向绿灯亮, 72 for(i=0;i<10;i++) 73 74 { 75 PA=0xff&(~LED3)&(~LED4); 76 PB=0xff&(~LED9)&(~LED10); 77 DelayMs(500); 78 } 79 80 81 // 东西方向红灯亮,南北方向黄灯闪烁 82 for(i=0;i<5;i++) 83 { 84 PA=0xff&(~LED3)&(~LED5); 85 PB=0xFF&(~LED9)&(~LED11); 86 DelayMs(300); 87 88 PA=0xFF &(~LED3); 89 PB=0xFF &(~LED9); 90 DelayMs(300); 91 } 92 93 } 94 95 96 }
总结疑问:
仿真现象,
初始化的时候,等全部亮了,居然,不太懂为什么????
for(i=0;i<5;i++) // 输出 四个红灯都亮,到底怎么回事,调试很凌乱啊,最好自己做一个实物
{
PA=0xFF & (~LED3)&(~LED6);
PB=0xFF & (~LED12)&(~LED9);
DelayMs(500);
}
还是要明白
8255 工作方式 以及 命令端口地址的定义,是最主要的,但是他妈的,不太懂啊??????
时间: 2024-10-08 00:48:15