STC 89C52 单片机引脚对应的功能以及实例讲解

2019-04-15 18:33发布

学习单片机能够让你更加深刻的认识到我们身边中常用电器的工作方式,接下来我们以引脚来讲解一些单片机中常用引脚的功能 目录   一、P1^0~7   对应八个二极管 二、数码管的使用 三、矩阵键盘的使用 四、液晶显示补充
 

先附上一张stc89C52引脚图



  光看引脚是不够的,下面我们看看实物图是什么样子的  

一、P1^0~7   对应八个二极管

二级管的实物图如下   从上往下 分别对应引脚中的 P1^0  ~ P1^7 这里就以一个比较简单流水灯作为实例代码 #include #include//包含_crol_函数所在的头文件 #define uint unsigned int #define uchar unsigned char void delayms(uint); uchar aa; //定义一个变量来给P1赋值 void main() { aa=0xfe;//赋初值11111110 while(1) { P1=aa;//点亮第一个灯 delayms(500);//延时500ms aa=_crol_(aa, 1);//aa循环左移1位后再给aa } } void delayms(uint xms) { uint i,j; for(i=xms;i>0;i--) for(j=110;j>0;j--); } 如果有不懂的可以查看我的关于流水灯的博客 51单片机 流水灯的实现  

二、数码管的使用

下面是数码管的实物图   dula=P2^6    段选 wela=P2^7  位选 每次要使用 数码管时 在主函数 中先打开位选,再送入位选信号,再关闭位选 然后再打开段选,输送段选信号,关闭段选   实例代码 #include sbit dula=P2^6;//申明U1寄存器的锁存端,P2^6是段锁 sbit wela=P2^7;//申明U2,P2^7是挝凰? main() { wela=1; //打开U2锁存端 P0=0xfe;//送入位选信号,确定哪几个数码管发光 wela=0;//关闭U2锁存器 dula=1;//段锁 P0=0x5e;//0x06代表1,确定数码管显示哪些字符 0~F dula=0; while(1); } 如果你不满足这段代码,可以看看我的这篇博客 51单片机开发中数码管显示与应用  

三、矩阵键盘的使用

独立键盘,即最下面一排的键盘分别为S2、S3、S4、S5 分别对应S2-----P3^4 分别对应S3-----P3^5 分别对应S4-----P3^6 分别对应S5-----P3^7 光说是肯定不够的,要拿实际的东西出来才可以,     我用红圈标记的地方就是s2 按键 下面就以这个简单的程序讲一下矩阵键盘的使用 #include sbit s2=P3^4; //采集按键状态,此时作为输入引脚 sbit led=P1^0; //此时作为输出引脚。 void delay(unsigned char p) { unsigned char m,n; for(m=p;m>0;m--) for(n=125;n>0;n--); } void main() { while(1) { if(s2==0) { delay(10); //消抖 if(s2==0) { while(!s2);//等待按键松开。 led=~led; } } } } 这段代码的实际作用,当你按下 s2 开关的时候,P1^0 所对应的二级管会变亮,当你再按下一次,二级管就会熄灭。  

四、液晶显示补充

液晶显示器是额外的显示仪器,它有两种显示型号,它们分别是 1602  和 12864,我这里只有1602型号的,我就简要介绍一下1602  的型号b把 1602液晶显示(1602型的液晶屏只能显示32字符,两行,每行18个)  这是属于一个独立的区块,需要另外再加上单片机的y上   引脚对应功能 sbit lcden=P3^4; //对应液晶使能端
sbit lcdrs=P3^5; //液晶数据命令选择端   实例代码 #include #define uchar unsigned char #define uint unsigned int sbit rs=P3^5; sbit lcden=P3^4; sbit dula=P2^6; sbit wela=P2^7; uchar table1[]="TX-51STAR MCU"; uchar table2[]="WWW.TXMCU.COM"; void delay(uint x) { uint a,b; for(a=x;a>0;a--) for(b=10;b>0;b--); } void delay1(uint x) { uint a,b; for(a=x;a>0;a--) for(b=100;b>0;b--); } void write_com(uchar com) { P0=com; rs=0; lcden=0; delay(10); lcden=1; delay(10); lcden=0; } void write_date(uchar date) { P0=date; rs=1; lcden=0; delay(10); lcden=1; delay(10); lcden=0; } void init() { dula=0; wela=0; write_com(0x38); //显示模式设置:16×2显示,5×7点阵,8位数据接口 delay(20); write_com(0x0f); //显示模式设置 delay(20); write_com(0x06); //显示模式设置:光标右移,字符不移 delay(20); write_com(0x01); //清屏幕指令,将以前的显示内容清除 delay(20); } void main() { uchar a; init(); write_com(0x80+17); //将第一个字符写在向右偏移17个字符处,为后面的由右向左划入做准备。 delay(20); for(a=0;a<13;a++) { write_date(table1[a]); delay(20); } write_com(0xc0+17); delay(50); for(a=0;a<13;a++) { write_date(table2[a]); delay(40); } for(a=0;a<16;a++) { write_com(0x18); //左移 delay1(600); } while(1); }   代码显示效果   这个液晶显示屏不太明显,但还是能隐隐约约看到一些字母出现   以上这些便都是基础板的讲解