1 / 378
文档名称:

吴坚鸿单片机.doc

格式:doc   大小:1,209KB   页数:378页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

吴坚鸿单片机.doc

上传人:文库旗舰店 2018/6/4 文件大小:1.18 MB

下载得到文件列表

吴坚鸿单片机.doc

相关文档

文档介绍

文档介绍:(一)按键行列扫描与蜂鸣器
(1)技术体会:在行列式扫描结构的薄膜按键里,干扰很大,按键扫描程序非常讲究,尤其是去抖动的处理。
(2)功能需求:每按一个按键,蜂鸣器就响一次。
(3)硬件原理:
(a)用4个IO来做2X2按键行列扫描,其中作为输入的2个IO口必须接上拉电阻20K左右。
(b)用1个IO经过8050三极管来驱动有源蜂鸣器,有源蜂鸣器通电就一直响,断电就停止。而无源蜂鸣器是要靠断断续续的开关信号来驱动才能响,就是要频率来驱动。
(4)源码适合的单片机:PIC18F4620,
(5)源代码讲解如下:
#include<>         //包含芯片相关头文件
//补充说明:吴坚鸿程序风格是这样的,凡是输出IO后缀都是_dr,凡是输入的//IO后缀都//是_sr
#define  beep_dr  LATA1  //蜂鸣器输出
#define key_dr1 LATB3  //2X2按键行输出
#define key_dr2 LATB4 //2X2按键行输出
#define key_sr1 RB6    //2X2按键行输入
#define key_sr2 RB7   //2X2按键行输入
//补充说明:吴坚鸿程序风格是这样的,凡是做延时计数阀值的常量
//t_表示。
#t1   25   //按键去抖动延时阀值
#t2   5    //按键行输出信号稳定的小延时阀值
#t_voice_time   60  //蜂鸣器响的声音长短的延时阀值
void delay1(unsigned int de)  ;//小延时程序,时间不宜太长,因为内部没有喂看门狗
//补充说明:吴坚鸿程序风格是这样的,凡是按键扫描函数都放在定时中
//断里,凡是按键服务程序都是放在main函数循环里。有人说不应该把子程序//放在中断里,别听他们,信鸿哥无坎坷。
void key_scan();                         //按键扫描函数,放在定时中断里
void key_service();                            //按键服务函数,放在main函数循环里
//补充说明:吴坚鸿程序风格是这样的,凡是switch()语句括号里面的变量名
//后缀都用_step表示。
unsigned char key_step=1;      //按键扫描步骤变量,在switch()语句的括号里
//补充说明:吴坚鸿程序风格是这样的,凡是按键或者感应输入的自锁变量名
//后缀都用_lock表示。
unsigned char key_lock1=0;   //按键自锁标志
//补充说明:吴坚鸿程序风格是这样的,凡是计数器延时的变量
//t表示。
unsigned int  t1=0;     //延时计数器的变量
unsigned int  t2=0;     //延时计数器的变量
unsigned int t;        //蜂鸣器响的声音长短的计数延时
//补充说明:吴坚鸿程序风格是这样的,凡是做类型的变量的分类
//后缀都用_sec表示。
Unsigned char key_sec=0;  //哪个按键被触发
//主程序
main()
{
ADCON0=0x00;  
ADCON1=0x0f;                               //全部为数字信号
    ADCON2=0xa1;                               //右对齐
    RBPU=0;                                      //上拉电阻
    SSPEN=0;                                    //决定RA5不作为串口
    TRISB3=0;            //配置按键行扫描IO为输出
    TRISB4=0;           //配置按键行扫描IO为输出
    TRISB6=1;           //配置按键列扫描IO为输入
    TRISB7=1;           //配置按键列扫描IO为输入
    T1CON=0x24;     //定时器中断配置
    TMR1H=0xF5;
    TMR1L=0x5F;
    TMR1IF=0;
    TMR1IE=1;
    TMR1ON=1;
    TMR1IE=1;
//补充说明,以上的内容为寄存器配置,每种不同的单片机会有点差异,
//大家不用过度关注以上寄存器的配