日常连载8
单片机最小系统: 晶振:
有源晶振:信号质量好精度高,价格较高,依赖特定的工作电压。 无源晶振:需要外部电路,价格低,不依赖于电压(有电压就能起振),依赖电容,又称为晶体。
复位电路: 1、上电复位分析 2、复位时间计算 t = 1.2RC(1.2*电阻*电容) 3、手动复位分析 图中R60是当按键按下的一瞬间,电容需要放电,如果没有这个电阻,会产生很大的电流产生电磁干扰,降低系统的稳定性,故加了这个电阻给电容放电保持系统的稳定。
按键消抖的更优方法1: http://www.360doc.com/showweb/0/0/782209534.aspx(在此网址有详细介绍,这里只作简短介绍)
单片机源程序:
- /*————备注:———————*
- 平台:Keil4 STC89C52RC
- 功能:
- 作者:西片
- 联系方式:18724145220@163.com
- 日期:2018/ /
- 备注: 晶振12MHz
- 更有效率的消抖方法
- *——————————————————*/
-
-
- //====头文件定义===*
- #include<reg52.h>
- #include<intrins.h>
- //=================*
-
-
- //====宏定义=======*
- #define uchar unsigned char
- #define uint unsigned int
- //=================*
-
-
- //====引脚说明=====*
- sbit LSA=P2^2;
- sbit LSB=P2^3;
- sbit LSC=P2^4;
- sbit key1=P1^7;//将矩阵键盘变为独立按键,让第一行的按键左端均为低电平,然后通过列的一个高低电平判断按键是否按下
- sbit KEY=P1^3;//第一个按键对应的列
- //=================*
-
- bit KeySta=1;//按键状态标志位
-
- //====全局变量=====*
- //=================*
-
-
- //====编码数组=====*
- uchar code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};//0~F,加无显示码
- //=================*
-
-
- //====定时器0设定==*
- void SetT0()
- {
- TMOD=0x01;
- TH0=0xf8;
- TL0=0x30;
- EA=1;
- ET0=1;
- TR0=1;
- }
- //=================*
-
-
- //====要添加的函数=*
- //=================*
-
-
- //====主函数=======*
- void main()
- {
- bit backup = 1;//备份上一次的状态,判断状态是否变化,和怎样变化。从0到1表示已经松开,从1到0表示在按下
- uchar cnt=0;
- LSA=0;
- LSB=0;
- LSC=0;//点亮第一个数码管(最右边的)
- key1=0;
- P0=smgduan[cnt];
- SetT0();
- while(1)
- {
- if(KeySta != backup)
- {
- if(backup == 0) //从0到1的变化表示按键已经松开,可以执行操作
- {
- cnt++;
- if(cnt >= 16)
- {
- cnt = 0;
- }
- P0 = smgduan[cnt];
- }
- backup = KeySta;//记录上一次的状态留作下一次的对比
- }
- }
- }
- //=================*
-
-
- //====定时器0中断==*
- void Timer0()interrupt 1
- {
- static uchar keybuf = 0xFF;//定义一个静态变量以记录按键8次状态是否都相同,相同则为稳定态,认定不是抖动。按键扫描缓冲区,保存一段时间内的扫描值。
-
- TH0=0xf8;//每2ms刷新一次状态记录,刷新8次即可得到一个字节(8次)的状态(由于人按下按键的最快时间一般不低于20ms,所以16ms可以满足检测)
- TL0=0x30;
-
- keybuf = (keybuf <<1) |KEY;//移位加或进行状态记录
- if(keybuf == 0x00)//八位全为0为按下转态
- {
- KeySta = 0;
- }
- else if(keybuf == 0xFF)//八位全为1认为弹起状态
- {
- KeySta = 1;
- }
- else//其余情况KeySta不变,认为抖动状态
- {
- }
-
- }
- //=================*
复制代码
完整的Word格式文档51黑下载地址:
08-单片机最小系统和消抖.docx
(222.77 KB, 下载次数: 10)
|