‘壹’ 单片机最小系统原理图,求详细讲解
我是一名单片机老玩家.
STC89C52单片机最小系统比较复杂,需要
STC89C52芯片 1 个,芯片底座 1 个,单排针 2 排
晶振电路:晶振 1 个,30pF电容 2 个
复位电路:10K电阻 1 个,10uF/16V电容 1 个
P0口上拉:10K排阻一个
电源去耦:10uF/16V电容 1 个,104 电容一个
建议使用STC最新的单片机STC15W4K32S4
完全兼容STC89C52,单独一个芯片就是最小系统
内部集成了高精度晶振和复位电路
P0、P1、P2、P3、P4、P5 口都可以配置为
开漏输出(和STC89C52的P0口一样)
或者弱上拉输出(和STC89C52的 P1、P2、P3 口一样)
或者推挽输出(最大驱动电流 20 mA)
‘贰’ 理解89c52单片机开发板的电路原理图
这个图应该很清楚了,各个功能模块都归纳到一个方框里面:
1、LCD1602显示模块接口
2、LCD12864显示模块接口
3、LED接口
4、蜂鸣器接口
5、ISP下载接口
6、PL2303驱动电路
7、电源电路
8、数码管电路接口及独立按键接口
9、DS18B20温度传感器接口及红外接收电路接口
10、CPU
11、复位电路和时钟电路。
这个开发板缺少4*4矩阵键盘。
‘叁’ 这是单片机4X4的键盘识别程序,请帮我解释,最好每句执行操作和原理都有,特别是case 0X0e; key=7的原因
temp等于0x0e时,键值key等于7 : 这个键值是你自己定义的,就是起一个标志位的作用,然后用程序判断键值,当键值等于7时,该进行什么动作,这就相当于当你那个按键按下时执行什么动作
写单片机C程序 一定要活用标志位
还有你好像都大四了,怎么这样普通的矩阵键盘程序还看不懂,该好好学习呀 兄弟
I和J 只是一个变量 用来决定延时时间的长短 延时是为了消除按键的抖动
毕竟机械按键存在抖动(按下去并不是电平直接就跳变并稳定下来了)
延时是软件消抖 增强系统的稳定性
‘肆’ 单片机 4*4矩阵键盘
这个电路图,只是你使用哪几个口在程序中对应上就可以了
程序
//行列扫描程序,可以自己定义端口和扫描方式,这里做简单介绍
#include<reg52.h>//包含头文件
#defineucharunsignedchar
#defineuintunsignedint
unsignedcharconstdofly[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,0x71};//0-F
ucharkeyscan(void);
voiddelay(uinti);
voidmain()
{
ucharkey;
P2=0x00;//1数码管亮按相应的按键,会显示按键上的字符
while(1)
{
key=keyscan();//调用键盘扫描,
switch(key)
{
case0x7e:P0=dofly[0];break;//0按下相应的键显示相对应的码值
case0x7d:P0=dofly[1];break;//1
case0x7b:P0=dofly[2];break;//2
case0x77:P0=dofly[3];break;//3
case0xbe:P0=dofly[4];break;//4
case0xbd:P0=dofly[5];break;//5
case0xbb:P0=dofly[6];break;//6
case0xb7:P0=dofly[7];break;//7
case0xde:P0=dofly[8];break;//8
case0xdd:P0=dofly[9];break;//9
case0xdb:P0=dofly[10];break;//a
case0xd7:P0=dofly[11];break;//b
case0xee:P0=dofly[12];break;//c
case0xed:P0=dofly[13];break;//d
case0xeb:P0=dofly[14];break;//e
case0xe7:P0=dofly[15];break;//f
}
}
}
ucharkeyscan(void)//键盘扫描函数,使用行列反转扫描法
{
ucharcord_h,cord_l;//行列值
P3=0x0f;//行线输出全为0
cord_h=P3&0x0f;//读入列线值
if(cord_h!=0x0f)//先检测有无按键按下
{
delay(100);//去抖
if(cord_h!=0x0f)
{
cord_h=P3&0x0f;//读入列线值
P3=cord_h|0xf0;//输出当前列线值
cord_l=P3&0xf0;//读入行线值
return(cord_h+cord_l);//键盘最后组合码值
}
}return(0xff);//返回该值
}
voiddelay(uinti)//延时函数
{
while(i--);
}
不明白的在联系我,也可以直接访问我的Blog:hi..com/lyzhangxiang