通过学习单片机,我们可以更深入地认识我们周围常用电器的工作原理。 接下来,我将用管脚说明几种单片机常用管脚的功能
目录
一、P1^0~7对应于8个二极管
二.数码管的使用
三.矩阵键盘的使用
四.液晶显示屏的补充
先附上一张stc89C52引脚图
光看大头针是不够的。 看看实物的照片吧
http://www.Sina.com/http://www.Sina.com /
从上到下分别对应引脚中的P1^0 ~ P1^7
这里,将比较简单的一、P1^0~7 对应八个二极管作为实例代码
# includereg 52.h # includeintrins.h//包含_crol_函数所在的头文件# defineuintunsignedint # defineucharunsignedcharvint //p1中的void main (定义要赋值的变量) { aa=0xfe; //初始值111111110while(1) { P1=aa; //点亮第一个灯光延迟ms (500 )//延迟500ms aa=_crol_(aa,1 )//aa循环左移一位,然后再移动aa}voiddelayms(uintXMS ) { uint i,j for(I=XMS; i0; i-- ) for(j=110; j0; j----; } 二级管的实物图如下
51单片机流水灯的实现
二、数码管的使用流水灯
如果有不懂的可以查看我的关于流水灯的博客
下面是数码管的实物图
每次使用数字管时
在主函数中打开dula=P2^6 段选,然后发送wela=P2^7 位选信号,关闭位选择
然后打开位选,发送位选信号,关闭字段选择
段选
#includereg52.hsbit dula=P2^6; 声明//U1寄存器的锁存端,P2^6为bbdwdsbit wela=P2^7; //U2,表明P2^7是老挝凤凰城吗? main () {wela=1; //U2打开锁存端子P0=0xfe; 发送//位选择信号,决定哪个数码管发出wela=0光; //U2关闭锁存器dula=1; //bbdwdP0=0x5e; //0x06表示1,决定数码管显示哪个字符0~Fdula=0; wile(1; }如果你不满意这个代码,请看我的这个博客
51单片机开发中数码管的显示与应用
三、矩阵键盘使用独立键盘,即最下面一列的键盘分别为S2、S3、S4、S5
分别对应S2-----P3^4
分别对应S3-----P3^5
分别对应S4-----P3^6
重点
别对应S5-----P3^7光说是肯定不够的,要拿实际的东西出来才可以,
我用红圈标记的地方就是s2 按键
下面就以这个简单的程序讲一下矩阵键盘的使用
#include<reg51.h>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<reg52.h>#define uchar unsigned char#define uint unsigned intsbit 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);}
代码显示效果
这个液晶显示屏不太明显,但还是能隐隐约约看到一些字母出现
以上这些便都是基础板的讲解