<一> 本次课堂以51系列单片机AT89S52为例来讲述,欢迎提问、批评和交流。
AT89S52单片机与普通的8051单片机管脚兼容,共有40个管脚,其中IO管脚共32个, 分别为P0.0-P0.7,P1.0-P1.7,P2.0-P2.7,P3.0-P3.7。
其中P0内部没有上拉,所以如果P0需要输出高电平的话必须在外部加上拉电阻。需要 注意的是,在作为数据/地址总线的情况下,单片机会自动开启P0的内部上拉功能,此时不需要 上拉电阻也可以输出高电平。 P1口为普通IO双向口,没有第二功能,常用来作为LED或数码管扫描控制接口及其他普通IO 控制端口。 P2口既可以作为普通双向IO口,也可以作为外部设备地址总线。 P3口既可以作为普通双向IO口,也具备丰富的第二功能,例如外部中断输入,定时器外部计数输入, UART口,总线读写控制端口等。
在实际设计电路时我们需要根据自己的需要合理安排IO的应用。
<二> 开始我们的第二讲,老生长谈的话题:点灯。这里我们采用延时的方法实现LED闪烁。 LED闪烁的基本原理就是通过IO口的电平高低变化实现LED的开和关,通过一定的延 时(延时时间至少大于100ms,否则人眼反应不过来),得到LED闪烁的结果。
下面是程序和仿真效果。附件包含了仿真图(Proteus 7.12和源代码,大家可以回去试试)
#include<reg52.h>
#define LED P1 //sbit LED0 = P1^0; typedef unsigned int uint; typedef unsigned char uchar; void Delay_Nms(uint N);
void main() { LED = 0xFF; //熄灭所有LED while(1) { LED ^= 0xFF; //取反LED,使之闪烁 Delay_Nms(1000);//延时约1秒 } }
void Delay_Nms(uint N) { uchar i; uint j; for(j = N; j>0 j--) { for(i = 0; i<120;i++); } }
图片什么的不好粘,大家自己去这个地方看吧
相关链接:http://www.neoic.cn/bbs/read-html-tid-772.html |