码迷,mamicode.com
首页 > 其他好文 > 详细

(十)单片机扩展 8255 芯片 控制 交通灯

时间:2015-12-28 15:36:55      阅读:422      评论:0      收藏:0      [点我收藏+]

标签:

目的: 单片机扩展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 工作方式 以及 命令端口地址的定义,是最主要的,但是他妈的,不太懂啊??????

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

                                                                                                                                             

(十)单片机扩展 8255 芯片 控制 交通灯

标签:

原文地址:http://www.cnblogs.com/shengruxiahua/p/5082517.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!