1、 课程设计报告书课程设计报告书 设计名称:设计名称: 单片机原理与应用 题题 目:目: 数码管显示 4X4 矩阵键盘按键号 专专 业:业: 计算机科学与技术 日日 期:期: 2012 年 6 月 11 日 1 一设计目的:一设计目的: 1) 了解单片机系统实现 LED 动态显示的原理及方法; 2) 较为详细了解 8051 芯片的性能; 3) 能够了解到单片机系统的基本原理,了解单片机控制原理; 4) 掌握 AT89C51 程序控制方法; 5) 掌握 AT89C51 C 语言中的设计和学会分析程序,进而能够根据自己的需要编 写代码; 6) 掌握 4X4 矩阵式键盘程序识别原理; 7) 掌握 4X
2、4 矩阵式键盘的设计方法; 8) 学习键盘的扫描方式和应用程序设计; 9) 培养根据课题需要选学参考书籍、查阅手册和文献资料的能力; 10) 能够按课程设计的要求编写课程设计报告,能够正确反映设计和实验成果。 二设计要求与主要内容:二设计要求与主要内容: 设计要求:设计要求: 单片机的 P1 口 P1.0P1.7 连接 4X4 矩阵键盘,P0 口控制一只 P0 口控制一 只数码管,当 44 矩阵键盘中的某一按键按下时,数码管上显示对应的键号。 例如,1 号键按下时,数码管显示“1” , 二号按下的时候,数码管显示“2” , 14 号键按下时,数码管显示“E”等等。 主要内容:主要内容: 1)4
3、4 矩阵键盘程序识别原理 。 2)每个按键都有它的行值和列值, 行值和列值的组合就是识别这个按键的编码。 矩阵的行线和列线都连接到 AT89C51 中,通过按键 K0K16,来在数码管显示 不同的值。 实验步骤:实验步骤: 1) 启动 keiuvision3 2)新建工程命名为单片机的 C 语言设计与应用 3)新建文件并另存为 C51c.c 4)在 SourceGroop1 导入文件 5)编写代码,并生 成 C 语言设计与应用.hex 文件。6) 在 Proteus 中设计电路图 7) 将 keil与 Proteus 联机调试,记下实验记录,得出实验结果。 2 三设计程序原理: (包含仿真图和
4、流程图)三设计程序原理: (包含仿真图和流程图) 1 1)主程序流程图)主程序流程图 2 2)程序流程图)程序流程图 : 开始 初始化 扫描键盘第一行 扫描键盘第二行 扫描键盘第三行 扫描键第四行 若无按键按下 若无按键按下 若无按键按下 若无按键按下 若有按键按下,显示键盘号 结束,返回 初始化 键值处理 请按键标识 是否有按键按下 显示所有按键 3 3)仿真图仿真图 四程序代码四程序代码 #include #define uchar unsigned char #define uint unsigned int /段码 ucharcode DSY_CODE=0xc0,0xf9,0xa4,0
5、xb0,0x99,0x92,0x82,0xf8,0x80,0x90, 0x88,0x83,0xc6,0xa1,0x86,0x8e,0x00; sbit BEEP=P37; /上次按键和当前按键的序号,该矩阵中序号范围 015,16 表示无按键 uchar Pre_KeyNo=16,KeyNo=16; /延时 void DelayMS(uint x) 结束,返回 4 uchar i; while(x-) for(i=0;i40x0f; /按键后 f0 变成 XXXX0000,X 中有 1 个为 0,三个 仍为 1;高 4 位转移到低 4 位并异或得到改变的值 switch(Tmp) /对 03
6、行分别附加起始值 0,4,8,12 case 1: KeyNo+=0;break; case 2: KeyNo+=4;break; case 4: KeyNo+=8;break; case 8: KeyNo+=12; /蜂鸣器 5 void Beep() uchar i; for(i=0;i100;i+) DelayMS(1); BEEP=BEEP; BEEP=0; /主程序 void main() P0=0x00; BEEP=0; while(1) P1=0xf0; if(P1!=0xf0) Keys_Scan(); /获取键序号 if(Pre_KeyNo!=KeyNo) P0= DSY_CODEKeyNo; Beep(); Pre_KeyNo=KeyNo; DelayMS(100); 五实验结果:五实验结果: 当按键按