单片机12 矩阵键盘控制数码管
单片机矩阵键盘,数码管,双机通信完美版

学生实习报告学生姓名:王耀辉专业班级:通信1304指导教师:撒继铭工作单位:信息工程学院题目: 单片机原理与应用初始条件: 单片机最小系统、下载电路、扩展电路、软件(PROTEUS等)、万用表、电烙铁等工具完成的主要任务:1)利用PROTEL等软件进行硬件设计;2)利用Keil uV2软件完成应用系统软件设计;3)利用stc-isp软件完成在系统编程、下载,并完成系统软件调试;4)题目由指导教师提供;5)要求每个学生单独完成硬件软件设计、仿真、焊接、调试任务;6)写出实习报告,实习报告主要包括以下内容:目录、摘要、关键词、基本原理、方案论证、硬件设计、软件设计(带流程图、程序清单)、仿真结果、实物运行结果照片、结论、参考文献等;7)实习完成后通过答辩;8)答辩时交实习报告电子文档,通过答辩后根据修改意见修改并打印、装订成册。
实习时间安排:序阶段内容所需时间号1 方案设计1天2 硬件设计2天3 软件设计2天4 系统仿真1天5 电路板焊接2天6 系统调试1天7 答辩1天合计10天指导教师签名:年月日系主任(或责任教师)签名:年月日目录摘要 -------------------------------------------------------------------------------------------------------I Abstract -------------------------------------------------------------------------------------------------- II 1设计任务及要求 -------------------------------------------------------------------------------------- 1 2 基本原理 ---------------------------------------------------------------------------------------------- 32.1基本原理及原理框图------------------------------------------------------------------------ 32.2 STC89C52结构功能介绍 ------------------------------------------------------------------ 33 硬件电路原理与设计 ------------------------------------------------------------------------------- 63.1复位电路--------------------------------------------------------------------------------------- 63.2振荡电路--------------------------------------------------------------------------------------- 73.3单片机最小系统------------------------------------------------------------------------------ 83.4数码管显示电路------------------------------------------------------------------------------ 93.4.1 数码管选择--------------------------------------------------------------------------- 93.4.2 LED芯片7SEG-MPX6-CA -------------------------------------------------------- 93.4.3 数码管电路设计------------------------------------------------------------------- 103.5 矩阵键盘电路 ------------------------------------------------------------------------------- 113.6串口通信电路------------------------------------------------------------------------------- 123.7 总设计电路 --------------------------------------------------------------------------------- 134 软件设计 -------------------------------------------------------------------------------------------- 144.1软件介绍------------------------------------------------------------------------------------- 144.1.1程序编写软件Keil ---------------------------------------------------------------- 144.1.2仿真软件Proteus ------------------------------------------------------------------- 144.2数码管显示设计---------------------------------------------------------------------------- 144.3串行通信接收程序------------------------------------------------------------------------- 155 仿真结果与分析 ----------------------------------------------------------------------------------- 175.1 数据输入 ------------------------------------------------------------------------------------ 175.2 数据显示 ------------------------------------------------------------------------------------ 185.3 实现串口通信 ------------------------------------------------------------------------------ 196实物展示 --------------------------------------------------------------------------------------------- 20 7心得体会 --------------------------------------------------------------------------------------------- 20 参考文献 ----------------------------------------------------------------------------------------------- 22 附录Ⅰ:元件清单 ----------------------------------------------------------------------------------- 24 附录Ⅱ:总程序设计 -------------------------------------------------------------------------------- 25摘要单片机最小系统,无论对单片机初学人员还是开发人员都具有十分重要的意义,可以利用最小系统进行编程实现工业控制。
单片机入门-矩阵键盘控制数码管显示

} } }
t=P2; t=t&0xf0;
单片机晶振复位电路:
锁存器、上拉电阻:
4x4矩阵键盘:
代码实现:
void key44scan(void)//键盘扫描函数 {
uint t; P2=0xfe; t=P2; t=t&0xf0; if(t!=0xf0) {
delay(); t=P2;
switch(t) {
case 0xee:keynum=1; break; case 0xde:keynum=5; break; case 0xbe:keynum=9; break; case 0x7e:keynum=13; break; } P0=table[keynum]; while(t!=0xf0) { t=P2; t=t&0xf0; } }
t=P2; t=t&0xf0; } }
P2=0xf7; t=P2; t=t&0xf0; if(t!=0xf0) {
delay(); t=P2;
switch(t) {
case 0xe7:keynum=4; break; case 0xd7:keynum=8; break; case 0xb7:keynum=12; break; case 0x77:keynum=0; break; } P0=table[keynum]; while(t!=0xf0) {
} P0=table[keynum]; while(t!=0xf0) {
t=P2; t=t&0xf0; } }
P2=0xfb; t=P2; t=t&0xf0; if(t!=0xf0) {
delay(); t=P2;
switch(t) {
case 0xeb:keynum=3; break; case 0xdb:keynum=7; break; case 0xbb:keynum=11; break; case 0x7b:keynum=15; break; } P0=table[keynum]; while(t!=0xf0) {
矩阵键盘 数码管显示

/****************************************************************************** **** 【函数功能】:矩阵键盘数码管显示* 【晶振】: 11.0592M* 【使用说明】:依次按下矩阵键盘的16个按键数码管上会显示1-16数字使用usb下载时,矩阵键盘B2按键会受到影响解决办法:取下下载选择2个红色短路帽即可******************************************************************************* ***//*预处理命令*/#include<reg52.h> //包含单片机寄存器的头文件#define uchar unsigned char#define uint unsigned int/* 函数申明-----------------------------------------------*/void delay(uint z);uint scan(void);void send595(uchar dat);void out595(void);void disp(uchar w,uchar d);void dispoff(void);/* 变量定义-----------------------------------------------*/sbit MOSIO=P2^2;sbit R_CLKa=P2^3;sbit S_CLKa=P2^4;uchar code duan[]={~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F};//此表为LED数码管段选字模uchar code wei[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //此表为LED数码管位选字模uchar num_key; //扫描按键计数uint num;/******************************************************************************** *** 函数名称:main(void)** 函数功能:主函数******************************************************************************* **/void main(){uint shi,ge;uint numb;while(1){ dispoff();numb=scan(); //调用键盘扫描if(numb<10){disp(6,0);delay(8);disp(7,numb);delay(8);}else{shi=numb/10;ge=numb%10;disp(6,shi);delay(8);disp(7,ge);delay(8);}}}/******************************************************************************** *** 函数名称:delay(uint z)** 函数功能:延时函数******************************************************************************* **/void delay(uint z){uint i,j;for(i=z;i>0;i--)for(j=100;j>0;j--);}/*********************************************************************************** 函数名称:scan(void)** 函数功能:按键扫描******************************************************************************* **/uint scan(void){uint num;P3=0xf7; //扫描第四排num_key=P3;num_key=num_key&0xf0;if(num_key!=0xf0){delay(5);P3=0xf7; //去抖动num_key=P3;num_key=num_key&0xf0;if(num_key!=0xf0)num_key=num_key|0x07;while(P3 !=0xf7){}}else{P3=0xfb; //扫描第三排num_key=P3;num_key=num_key&0xf0;if(num_key!=0xf0){delay(5);P3=0xfb; //去抖动num_key=P3;num_key=num_key&0xf0;if(num_key!=0xf0)num_key=num_key|0x0b;// while(P3 !=0xfb){}}else{P3=0xfd; //扫描第二排num_key=P3;num_key=num_key&0xf0;if(num_key!=0xf0){delay(5);P3=0xfd; //去抖动num_key=P3;num_key=num_key&0xf0;if(num_key!=0xf0)num_key=num_key|0x0d;// while(P3 !=0xfd){}}else{P3=0xfe; //扫描第一排num_key=P3;num_key=num_key&0xf0;if(num_key!=0xf0){delay(5);P3=0xfe; //去抖动num_key=P3;num_key=num_key&0xf0;if(num_key!=0xf0)num_key=num_key|0x0e;// while(P3 !=0xfe){}}}}}switch(num_key) //键盘扫描值num_key判断,即几号按键被按下{case 0xee :num=1;break; //B1按键case 0xde :num=2;break; //B2按键case 0xbe :num=3;break; //B3按键case 0x7e :num=4;break; //B4按键case 0xed :num=5;break; //B5按键case 0xdd :num=6;break; //B6按键case 0xbd :num=7;break; //B7按键case 0x7d :num=8;break; //B8按键case 0xeb :num=9;break; //B9按键case 0xdb :num=10;break; //B10按键case 0xbb :num=11;break; //B11按键case 0x7b :num=12;break; //B12按键case 0xe7 :num=13;break; //B13按键case 0xd7 :num=14;break; //B14按键case 0xb7 :num=15;break; //B15按键case 0x77 :num=16;break; //B16按键}return num;}/******************************************************************************** *** 函数名称:send595(uchar dat)** 函数功能:数据输入******************************************************************************* **/void send595(uchar dat) //数据输入{uchar i;for(i=0;i<8;i++){if((dat<<i)&0x80)MOSIO=1;else MOSIO=0;S_CLKa=0;S_CLKa=1;}}/******************************************************************************** *** 函数名称:out595** 函数功能:数据输出******************************************************************************* **/void out595(void) // 数据输出{R_CLKa=0;R_CLKa=1; //上升沿}/******************************************************************************** *** 函数名称:disp(uchar w,uchar d)** 函数功能:数码管显示函数******************************************************************************* **/void disp(uchar w,uchar d) //数码管显示函数:w-位码,d-段码{send595(wei[w]);send595(duan[d]);out595();}/******************************************************************************** *** 函数名称:dispoff(void)** 函数功能:关闭共阳数码管******************************************************************************* **/void dispoff(void) //关闭共阳数码管{send595(0);send595(0);out595();send595(0xff);out595();}。
单片机实验报告——矩阵键盘数码管显示

单片机实验报告信息处理实验实验二矩阵键盘专业:电气工程及其自动化指导老师:***组员:明洪开张鸿伟张谦赵智奇学号:152703117 \152703115\152703118\152703114室温:18 ℃日期:2017 年10 月25日矩阵键盘一、实验内容1、编写程序,做到在键盘上每按一个键(0-F)用数码管将该建对应的名字显示出来。
按其它键没有结果。
二、实验目的1、学习独立式按键的查询识别方法。
2、非编码矩阵键盘的行反转法识别方法。
3、掌握键盘接口的基本特点,了解独立键盘和矩阵键盘的应用方法。
4、掌握键盘接口的硬件设计方法,软件程序设计和贴士排错能力。
5、掌握利用Keil51软件对程序进行编译。
6、会根据实际功能,正确选择单片机功能接线,编制正确程序。
对实验结果能做出分析和解释,能写出符合规格的实验报告。
三、实验原理1、MCS51系列单片机的P0~P3口作为输入端口使用时必须先向端口写入“1”。
2、用查询方式检测按键时,要加入延时(通常采用软件延时10~20mS)以消除抖动。
3、识别键的闭合,通常采用行扫描法和行反转法。
行扫描法是使键盘上某一行线为低电平,而其余行接高电平,然后读取列值,如读列值中某位为低电平,表明有键按下,否则扫描下一行,直到扫完所有行。
行反转法识别闭合键时,要将行线接一并行口,先让它工作在输出方式,将列线也接到一个并行口,先让它工作于输入方式,程序使CPU通过输出端口在各行线上全部送低电平,然后读入列线值,如此时有某键被按下,则必定会使某一列线值为0。
然后,程序对两个并行端口进行方式设置,使行线工作于输入方式,列线工作于输出方式,并将刚才读得的列线值从列线所接的并行端口输出,再读取行线上输入值,那么,在闭合键所在行线上的值必定为0。
这样,当一个键被接下时,必定可以读得一对唯一的行线值和列线值。
由于51单片机的并口能够动态地改变输入输出方式,因此,矩阵键盘采用行反转法识别最为简便。
单片机培训第3讲——矩阵键盘、数码管、中断

拓展部分
1. 利用仪器设备或自己计算频率,,实现一个按键控制的简易电子琴,发 出声音的音调级别可通过数码管显示出来。
Page
36
感谢您的关注
Weihei 2013.05.12
用Delay延时函数方式,加入人为制造的CPU阻塞(既是在调用完显 示函数后,加一个1S的Delay延时函数),观察其效果并分析原因。 Note:Delay延时函数定义为
for(i=0;i<100;i++) for(j=0;j<200;j++);//让单片机连续200*100个时钟周期都不执行操作 此类让单片机不执行任何操作的延时即是阻塞CPU方式的延时。
13
数码管的原理---如何点亮一只数码管
16进制表示为 0X06 P1.0 | | | | | | | P1.7 0X5B
利用80C51单片机P1口点亮一只数码管原理图
Page
14
数码管---断码查询小工具
Page
15
点亮单只数码管---代码
Page
16
数码管---多位数码管一起亮的原理
余晖效应
让手里的单片机“有声有色”
Weihei 2013.05.12
温习---利用单片机IO输出
直接对IO口赋值
Unsigned char LEDVal = 0xFE; P1 = 0X5FE; P1 = LEDVal;
利用位运算或移位函数改变LEDVal值,即可实现多种方式流水效果
LEDVal = LEDVal >> 1; LEDVal |= 0x80;//左移一位 LEDVal = _crol_(LEDVal ,1);//循环左移,每次移动1位
51单片机数码管显示及矩阵键盘扫描程序

51单片机数码管显示及矩阵键盘扫描程序硬件实验十一八段数码管实验一、实验任务1、在静态数码管上轮流显示数字0-9。
2、在两个4位数码管上动态显示数字0-9二、流程图及程序静态显示:流程图:程序代码:#include#define uchar unsigned chucharcodevalue[10]={0xC0,0xF9,0xA4,0xB0,0X99,0x92,0x82,0xF8,0 x80,0x90};//0 -9数码管显示段码void delay(char x) //延时子程序{uchar i;for(i=0;i<200;i++);}main() //主函数{int i;while(1){for(i=0;i<10;i++) //显示0-9{P0=codevalue[i];delay(500); //延时1秒}}}动态显示:#include#includetab1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6D,0x7D,0x07,0x7f,0x6f}; //数码管显示数字字段unsigned char tab2[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//片选字段unsigned char i,k,j,x;void delay(x); //声明延时子函数void main() //主函数{while(1){for(i=0;i<8;i++) //显示0-7{ P1=tab1[i];P0=tab2[i];delay(5); //延时}P1=tab1[8]; P0=tab2[0]; delay(5); //显示8-9P1=tab1[9]; P0=tab2[1]; delay(5);}}void delay(x) //延时函数定义{do{for(j=0;j<250;j++)for(k=0;k<250;k++);}}硬件实验十二矩阵键盘扫描显示一、实验任务1、把矩阵键盘上的按键输入的键码在静态数码管上显示出来。
单片机矩阵键盘与数码管课程设计

单片机矩阵键盘与数码管课程设计(总16页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--矩阵键盘与数码管显示摘要矩阵式键盘乃是目前使用较为广泛的一种键盘模式,该系统以N个端口连接控制N*N个按键,即时在LED数码管上。
单片机控制的据这是键盘显示系统,该系统可以对不同的按键进行实时显示,其核心是单片机和键盘矩阵电路部分,主要对按键与显示电路的关系、矩阵式技术及设备系统的硬件、软件等各个部分进行实现。
4*4矩阵式键盘采用89C51单片机为核心,主要由矩阵式键盘电路、译码电路、显示电路等组成,软件选用C语言编程,单片机将检测到的按键信号转换成数字量,显示于数码管显示器,系统灵活性强,易于操作,可靠性能好。
单片机简介及主系统电路单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换444器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域的广泛应用。
从上世纪80年代,由当时的4位、8位单片机,发展到现在的32位300M的高速单片机。
单片机在工业控制领域广泛应用,它由芯片内仅有CPU的专用处理器发展而来。
最早的设计理念是通过将大量外围设备和CPU集成在一个芯片中,使计算机系统更小,更容易集成进复杂的而对体积要求严格的控制设备当中,本次课程设计我们采用的是AT89C51型号的单片机。
AT89C51单片机是51系列单片机的一个成员,是8051单片机的简化版。
内部自带2K字节可编程FLASH存储器的低电压、高性能COMS八位微处理器,与Intel MCS-51系列单片机的指令和输出管脚相兼容。
由于将多功能八位CPU和闪速存储器结合在单个芯片中,因此,AT89C2051构成的单片机系统是具有结构最简单、造价最低廉、效率最高的微控制系统,省去了外部的RAM、ROM和接口器件,减少了硬件开销,提高了系统的性价比。
实验四:矩阵按键与数码管显示

switch(P2) { case(0X70): KeyValue=3;break; case(0XB0): KeyValue=2;break; case(0XD0): KeyValue=1;break; case(0XE0): KeyValue=0;break; } //测试行 P2=0X0F; switch(P2) { case(0X07): KeyValue=KeyValue+12;break; case(0X0B): KeyValue=KeyValue+8;break; case(0X0D): KeyValue=KeyValue+4;break; case(0X0E): KeyValue=KeyValue;break; } //此处是流程图中所缺少的部分请尝试理解与运用 while((a<50)&&(P2!=0x0F)) { Delay(1000); a++; } } } return KeyValue; }
图 4 数码管动态显示
实例:
B C D E F G H
RP1
RESPACK-8 P0.0 P0.1 P0.2 P0.3 P0.7 P0.6 P0.5 P0.4 P1.3 P1.2 P1.1 P1.0
C2
100pF
1 1
U1 X1
19 XTAL1 CRYSTAL P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7 P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15 P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD 39 38 37 36 35 34 33 32 21 22 23 24 25 26 27 28 10 11 12 13 14 15 16 17
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(一)复习引入
复习按键控制单个数码管的显示
(二)新课内容
1、电路原理图设计
矩阵式键盘由P3口控制,P3.0、P3.1、P3.2、P3.3引脚分别控制第一、二、三、四行(从上到下),P3.4、P3.5、P3.6、P3.7引脚分别控制第一、二、三、四列(从左到右)。动态数码管由P0口和P2口控制,P0口控制数码管的数值,P2口控制数码管的位码。
P1.41 1 1 00 0 0 0 第一行有按钮按下0xe0;
P1.51 1 0 10 0 0 0第二行有按钮按下0xd0;
P1.61 0 1 10 0 0 0第三行有按钮按下0xb0;
P1.70 1 1 10 0 0 0第四行有按钮按下0x70;
(4)确定了按钮的行与列,就能确定被按下按钮的位置,将按钮行与列的信息存于同一变量中(c=a|b),此时c变量中存储的就是被按下按键的键码,从键码就能判断按钮的位置,
情感态度价值观:培养学生分析问题、解决问题的能力
重点
能够读懂电路原理图,理解程序含义及步骤
难点
能够根据简单要求学会修改程序,达到教师要求
学情分析
学生思维灵活,课堂气氛活跃,喜欢动手操作
教学方法
一体化教学,着重实操教学
教学准备
根据教学要求做好PPT和演示程序,深入讲解程序
教学过程与内容
设计意图
教学方法
(2)若P1.0至P1.3有引脚产生了电平变化,则说明被拉低电平那一列有按钮被按下,用变量(这里假设是变量a)将IO口的二进制信息存储起来(a=P0;),其中高四位为行信息,所以一定为0,低四位为有效信息(反应出那一列有按钮按下),一共有以下四种情况:
P1.00 0 0 01 1 1 0第一列有按钮按下0x0e;
2、电路控制程讲解(程序太长,略)
3、矩阵式键盘的工作原理
当单片机高电平的引脚与低电平的引脚相连接,高电平的引脚将被低电平的引脚“拉”至低电平。根据这个规律,我们常用“行扫描法”对矩阵式键盘进行识别,过程如下:
(1)引脚P1.4至P1.7输出底电平,引脚 P1.0至P1.3输出高电平(P0=0x0f;),观察引脚 P1.0至P1.3引脚有没有电平变化,若无,则无按键被按下。
P1.10 0 0 01 1 0 1第二列有按钮按下0x0d;
P1.20 0 0 01 0 1 1第三列有按钮按下0x0b;
P1.30 0 0 00 1 1 1第四列有按钮按下0x07;
(3)测出列的位置,我们再测行的位置。引脚P1.4至P1.7输出高电平,引脚 P1.0至P1.3输出低电平(P0=0xf0;),这时,有按键按下的那一行将会把该行的引脚电平拉低,将此时的IO口的二进制信息存于另一变量中(假设是变量b).
单片机原理及应用课程教案
课题
矩阵键盘控制数码管
授课人
葛和平
课程类型
一体化课程
范围及性质
普通(校级、市级公开课)
班级
15楼宇班
课时
2课时
上课时间
2016-2017学年第二学期
上课地点
4A-512
教学目标
知识与技能:具备基础的单片机知识,能够读懂电路原理图
过程与方法:培养学生查询资料的能力和团结协作的意识
通过引入现实生活中的实例,引入电路
一体化课堂教学
10分钟
20分钟
50分钟实训
10分钟总结
教学反思