服装毕业设计代做网站,合肥网站制作哪家强,襄阳网站建设价格,网站引导页分为三个板块设计风格目录
目录
目的
一#xff0c;STC单片机模块
二#xff0c;矩阵按键模块
2.1 针脚定义
编辑
2.2 矩阵按键位置
2.3 如何理解按键按下后针脚的高低电平
2.3.1 错误理解1
2.3.2 错误理解2
2.3.3 正确判定按下的是那个按键的逻辑
2.3.4 判定按键按下的依次扫描程…目录
目录
目的
一STC单片机模块
二矩阵按键模块
2.1 针脚定义
编辑
2.2 矩阵按键位置
2.3 如何理解按键按下后针脚的高低电平
2.3.1 错误理解1
2.3.2 错误理解2
2.3.3 正确判定按下的是那个按键的逻辑
2.3.4 判定按键按下的依次扫描程序代码如下
三创建Keil项目
四代码
五代码编译、下载到51单片机
六效果
编辑 目的
按下矩阵按键数码管显示按下的键值
一STC单片机模块 二矩阵按键模块
2.1 针脚定义 2.2 矩阵按键位置 2.3 如何理解按键按下后针脚的高低电平
2.3.1 错误理解1
初学者按键按下后就到通针脚导通就是高电平我最开始是这么理解的。这种理解不是不正确只是没结合实际电路分析
我们按照初学者的逻辑来分析下
假如S1按下 P17和P13 此时是相同的电平。那么他们是同时处于高电平还是低电平呢我们在程序中怎么去判定呢是S1按下的呢这里要明白 系统上电后针脚P10-P17都是低电平。那么P13和P17及时接通了也还是都处于低电平。
2.3.2 错误理解2
既然要有电位差那直接先给P17-P14都给高电平然后判定P10-P13上的电平。或者先给P10-P14高电平然后判断P17-P14 的电平。我们看电路图 我们来判定P17 上的电平。如果是高电平S1按下 P17是高电平S2按下P17也是高电平S3按下P17也是高电平S4按下P17还是高电平。实际上我们不能确定按下的那个按键。
2.3.3 正确判定按下的是那个按键的逻辑
我们只能依次给P10-P13纵排或者P17-P14(横排)高电平为什么要依次给高电平不能同时给高电平上面两个错误理解已经说了。
假如按键按下了S10我们来分析。 我们先给P10 高电平如下图然后分别检测P17-P14的电平状态。发现P17-P14全是低电平。 在把P10设置为低电平P11设置为高电平如下图。然后分别检测P17-P14的电平状态。发现P17-P14任然全是低电平。 在把P11设置为低电平P12设置为高电平如下图。然后分别检测P17-P14的电平状态。发现P15是高电平P14、P16、P17是低电平。 再把P12设置为低电平P13设置为高电平如下图。然后分别检测P17-P14的电平状态。发现P17-P14任然全是低电平。 所以这里只能依次扫描
2.3.4 判定按键按下的依次扫描程序代码如下 unsigned char MatrixKey()
{unsigned char KeyNumber0;P10xFF;P1_30;if(P1_70){Delay_ms(20);while(P1_70);Delay_ms(20);KeyNumber1;}if(P1_60){Delay_ms(20);while(P1_60);Delay_ms(20);KeyNumber5;}if(P1_50){Delay_ms(20);while(P1_50);Delay_ms(20);KeyNumber9;}if(P1_40){Delay_ms(20);while(P1_40);Delay_ms(20);KeyNumber13;}P10xFF;P1_20;if(P1_70){Delay_ms(20);while(P1_70);Delay_ms(20);KeyNumber2;}if(P1_60){Delay_ms(20);while(P1_60);Delay_ms(20);KeyNumber6;}if(P1_50){Delay_ms(20);while(P1_50);Delay_ms(20);KeyNumber10;}if(P1_40){Delay_ms(20);while(P1_40);Delay_ms(20);KeyNumber14;}P10xFF;P1_10;if(P1_70){Delay_ms(20);while(P1_70);Delay_ms(20);KeyNumber3;}if(P1_60){Delay_ms(20);while(P1_60);Delay_ms(20);KeyNumber7;}if(P1_50){Delay_ms(20);while(P1_50);Delay_ms(20);KeyNumber11;}if(P1_40){Delay_ms(20);while(P1_40);Delay_ms(20);KeyNumber15;}P10xFF;P1_00;if(P1_70){Delay_ms(20);while(P1_70);Delay_ms(20);KeyNumber4;}if(P1_60){Delay_ms(20);while(P1_60);Delay_ms(20);KeyNumber8;}if(P1_50){Delay_ms(20);while(P1_50);Delay_ms(20);KeyNumber12;}if(P1_40){Delay_ms(20);while(P1_40);Delay_ms(20);KeyNumber16;}return KeyNumber;
}
三创建Keil项目
详细参考51单片机STC89C52RC——创建Keil项目-CSDN博客
四代码
main.c
#include REGX52.H
#include ShuMaGuan.h
#include Delay.h
#include MatrixKey.h
/*** 函 数主函数* 参 数无* 返 回 值无*/
void main()
{unsigned int KeyNum0,ShowKeyNum0;while(1){KeyNumMatrixKey(); //获取按下的键if(KeyNum){ShowKeyNumKeyNum; //将按下的键赋值给显示值}ShuMaGuan_ShowNumber(ShowKeyNum);//数码管显示}
}
ShuMaGuan.c
#include REGX52.H
#include Delay.h
/*数码管可显示值*/
unsigned int ShuMaGuan_EnableDisplayValue[]{0,1,2,3,4,5,6,7,8,9,A,C,E,F,H,J,L,P,q,U,.,b,d,u,-};
/*数码管显示值对应的HEX*/
unsigned int ShuMaGuan_EnableDisplayHEX[]{0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x39,0x79,0x71,0x76,0x1E,0x38,0x73,0x67,0x3E,0x80,0x7C,0x5E,0x1C,0x40};
/*** 函 数获取可显值对应的HEX* 参 数数码管显示的值* 返 回 值数码管显示时对应的HEX*/
unsigned int ShuMaGuan_GetEnableDisplayValueOfHEX(unsigned int Value)
{unsigned int index0;for(index0;index24;index)//遍历显示值的数组{if(ShuMaGuan_EnableDisplayValue[index]Value)//找到对应值的索引{break;}}return ShuMaGuan_EnableDisplayHEX[index];
}
/*** 函 数设置数码管要显示的值* 参 数显示值* 返 回 值无*/
void ShuMaGuan_SetDisplayValue(unsigned int Value)
{/*将要显示的值 复制给P0*/P0ShuMaGuan_GetEnableDisplayValueOfHEX(Value);
}
/*** 函 数设置要显示的数码管 位置* 参 数位置左起1-8* 返 回 值无*/
void ShuMaGuan_SetDisplayLocation(unsigned int Location)
{switch(Location) //位码输出{case 1:P2_41;P2_31;P2_21;break;case 2:P2_41;P2_31;P2_20;break;case 3:P2_41;P2_30;P2_21;break;case 4:P2_41;P2_30;P2_20;break;case 5:P2_40;P2_31;P2_21;break;case 6:P2_40;P2_31;P2_20;break;case 7:P2_40;P2_30;P2_21;break;case 8:P2_40;P2_30;P2_20;break;}
}
/*** 函 数数码管展示* 参 数Location 显示的位置Value 显示的值* 返 回 值无*/
void ShuMaGuan_Display(unsigned int Location,unsigned int Value)
{/*显示位置*/ShuMaGuan_SetDisplayLocation(Location);/*显示值*/ShuMaGuan_SetDisplayValue(Value);/*等待显示稳定*/Delay_10us(10);/*消除阴影*/P00x00;
}
/*** 函 数显示一个数字 * 参 数整形数字 -32767到32767* 返 回 值无*/
void ShuMaGuan_ShowNumber(int Num)
{int Location8,Temp,Flag1;if(Num0){Num-Num;//再将负数转为正数Flag-1;//表示需要显示‘负号-’}TempNum%10;while(Location0Num0){ShuMaGuan_Display(Location,Temp); Location--;NumNum/10;TempNum%10;} if(Flag-1Location0){ShuMaGuan_Display(Location,-);//负数显示负号 }
}
ShuMaGuan.h
#ifndef __SHUMAGUAN_H_
#defind __SHUMAGUAN_H_
void ShuMaGuan_Display(unsigned int Location,unsigned int Value);
void ShuMaGuan_ShowNumber(int Num);
#endifDelay.c /*** 函 数延时函数 毫秒* 参 数ms 延时多少毫秒* 返 回 值无*/
void Delay_ms(int ms) //12.000MHz
{unsigned char data i, j;while(ms--){ i 2;j 239;do{while (--j);} while (--i);}
}
/*** 函 数延时函数 毫秒* 参 数ms 延时多少毫秒* 返 回 值无*/
void Delay_us(int ms) //12.000MHz
{unsigned char data i, j;while(ms--){ i 2;j 239;do{while (--j);} while (--i);}
}
/*** 函 数延时函数 10微秒* 参 数无* 返 回 值无*/
void Delay_10us(int _10us) //11.0592MHz
{unsigned char data i;while(_10us--){i 2;while (--i);}
} Delay.h
#ifndef __DELAY_H_
#defind __DELAY_H_
void Delay_ms(int ms);
void Delay_10us(int _10us);
#endifMatrixKey.c
#include REGX52.H
#include Delay.h/*** 函 数矩阵键盘读取按键键码* 参 数无* 返 回 值KeyNumber 按下按键的键码值如果按键按下不放程序会停留在此函数松手的一瞬间返回按键键码没有按键按下时返回0*/
unsigned char MatrixKey()
{unsigned char KeyNumber0;P10xFF;P1_30;if(P1_70){Delay_ms(20);while(P1_70);Delay_ms(20);KeyNumber1;}if(P1_60){Delay_ms(20);while(P1_60);Delay_ms(20);KeyNumber5;}if(P1_50){Delay_ms(20);while(P1_50);Delay_ms(20);KeyNumber9;}if(P1_40){Delay_ms(20);while(P1_40);Delay_ms(20);KeyNumber13;}P10xFF;P1_20;if(P1_70){Delay_ms(20);while(P1_70);Delay_ms(20);KeyNumber2;}if(P1_60){Delay_ms(20);while(P1_60);Delay_ms(20);KeyNumber6;}if(P1_50){Delay_ms(20);while(P1_50);Delay_ms(20);KeyNumber10;}if(P1_40){Delay_ms(20);while(P1_40);Delay_ms(20);KeyNumber14;}P10xFF;P1_10;if(P1_70){Delay_ms(20);while(P1_70);Delay_ms(20);KeyNumber3;}if(P1_60){Delay_ms(20);while(P1_60);Delay_ms(20);KeyNumber7;}if(P1_50){Delay_ms(20);while(P1_50);Delay_ms(20);KeyNumber11;}if(P1_40){Delay_ms(20);while(P1_40);Delay_ms(20);KeyNumber15;}P10xFF;P1_00;if(P1_70){Delay_ms(20);while(P1_70);Delay_ms(20);KeyNumber4;}if(P1_60){Delay_ms(20);while(P1_60);Delay_ms(20);KeyNumber8;}if(P1_50){Delay_ms(20);while(P1_50);Delay_ms(20);KeyNumber12;}if(P1_40){Delay_ms(20);while(P1_40);Delay_ms(20);KeyNumber16;}return KeyNumber;
}MatrixKey.h
#ifndef __MATRIXKEY_H__
#define __MATRIXKEY_H__unsigned char MatrixKey();#endif五代码编译、下载到51单片机
代码编译请参考
《51单片机STC89C52RC——代码编译-CSDN博客》
代码下载请参考
《51单片机STC89C52RC——STCAI-ISP代码下载-CSDN博客》
六效果
文章转载自: http://www.morning.zmwzg.cn.gov.cn.zmwzg.cn http://www.morning.yhtnr.cn.gov.cn.yhtnr.cn http://www.morning.rgnq.cn.gov.cn.rgnq.cn http://www.morning.sfyqs.cn.gov.cn.sfyqs.cn http://www.morning.czgfn.cn.gov.cn.czgfn.cn http://www.morning.xscpq.cn.gov.cn.xscpq.cn http://www.morning.hmxrs.cn.gov.cn.hmxrs.cn http://www.morning.pbwcq.cn.gov.cn.pbwcq.cn http://www.morning.cfccp.cn.gov.cn.cfccp.cn http://www.morning.nbgfk.cn.gov.cn.nbgfk.cn http://www.morning.rcttz.cn.gov.cn.rcttz.cn http://www.morning.gkmwk.cn.gov.cn.gkmwk.cn http://www.morning.nwclg.cn.gov.cn.nwclg.cn http://www.morning.nzlsm.cn.gov.cn.nzlsm.cn http://www.morning.llxns.cn.gov.cn.llxns.cn http://www.morning.5-73.com.gov.cn.5-73.com http://www.morning.gbrdx.cn.gov.cn.gbrdx.cn http://www.morning.drspc.cn.gov.cn.drspc.cn http://www.morning.fssjw.cn.gov.cn.fssjw.cn http://www.morning.kaoshou.net.gov.cn.kaoshou.net http://www.morning.qkqpy.cn.gov.cn.qkqpy.cn http://www.morning.qwfq.cn.gov.cn.qwfq.cn http://www.morning.linzhigongmao.cn.gov.cn.linzhigongmao.cn http://www.morning.jsrnf.cn.gov.cn.jsrnf.cn http://www.morning.pxsn.cn.gov.cn.pxsn.cn http://www.morning.tbrnl.cn.gov.cn.tbrnl.cn http://www.morning.blqgc.cn.gov.cn.blqgc.cn http://www.morning.rzbgn.cn.gov.cn.rzbgn.cn http://www.morning.xphcg.cn.gov.cn.xphcg.cn http://www.morning.yzsdp.cn.gov.cn.yzsdp.cn http://www.morning.srky.cn.gov.cn.srky.cn http://www.morning.sxbgc.cn.gov.cn.sxbgc.cn http://www.morning.kgnnc.cn.gov.cn.kgnnc.cn http://www.morning.nyplp.cn.gov.cn.nyplp.cn http://www.morning.dgmjm.cn.gov.cn.dgmjm.cn http://www.morning.kzbpx.cn.gov.cn.kzbpx.cn http://www.morning.nylbb.cn.gov.cn.nylbb.cn http://www.morning.nwnbq.cn.gov.cn.nwnbq.cn http://www.morning.rhfbl.cn.gov.cn.rhfbl.cn http://www.morning.fmjzl.cn.gov.cn.fmjzl.cn http://www.morning.lqznq.cn.gov.cn.lqznq.cn http://www.morning.zfyr.cn.gov.cn.zfyr.cn http://www.morning.pxwjp.cn.gov.cn.pxwjp.cn http://www.morning.wrwcf.cn.gov.cn.wrwcf.cn http://www.morning.skmpj.cn.gov.cn.skmpj.cn http://www.morning.dmtwz.cn.gov.cn.dmtwz.cn http://www.morning.lsnhs.cn.gov.cn.lsnhs.cn http://www.morning.wfbs.cn.gov.cn.wfbs.cn http://www.morning.prxqd.cn.gov.cn.prxqd.cn http://www.morning.zwhtr.cn.gov.cn.zwhtr.cn http://www.morning.ywzqk.cn.gov.cn.ywzqk.cn http://www.morning.nccqs.cn.gov.cn.nccqs.cn http://www.morning.xqjrg.cn.gov.cn.xqjrg.cn http://www.morning.jnhhc.cn.gov.cn.jnhhc.cn http://www.morning.kdnrc.cn.gov.cn.kdnrc.cn http://www.morning.qcrhb.cn.gov.cn.qcrhb.cn http://www.morning.wzwpz.cn.gov.cn.wzwpz.cn http://www.morning.wrlqr.cn.gov.cn.wrlqr.cn http://www.morning.kflzy.cn.gov.cn.kflzy.cn http://www.morning.sfgzx.cn.gov.cn.sfgzx.cn http://www.morning.kfclh.cn.gov.cn.kfclh.cn http://www.morning.ktmnq.cn.gov.cn.ktmnq.cn http://www.morning.lqpzb.cn.gov.cn.lqpzb.cn http://www.morning.lstmg.cn.gov.cn.lstmg.cn http://www.morning.rcttz.cn.gov.cn.rcttz.cn http://www.morning.wqkzf.cn.gov.cn.wqkzf.cn http://www.morning.gdgylp.com.gov.cn.gdgylp.com http://www.morning.rkrl.cn.gov.cn.rkrl.cn http://www.morning.yxlhz.cn.gov.cn.yxlhz.cn http://www.morning.ngcth.cn.gov.cn.ngcth.cn http://www.morning.qkdbz.cn.gov.cn.qkdbz.cn http://www.morning.nxnrt.cn.gov.cn.nxnrt.cn http://www.morning.jkftn.cn.gov.cn.jkftn.cn http://www.morning.pcshb.cn.gov.cn.pcshb.cn http://www.morning.rnngz.cn.gov.cn.rnngz.cn http://www.morning.hxrfb.cn.gov.cn.hxrfb.cn http://www.morning.dzyxr.cn.gov.cn.dzyxr.cn http://www.morning.brwei.com.gov.cn.brwei.com http://www.morning.wjndl.cn.gov.cn.wjndl.cn http://www.morning.dtcsp.cn.gov.cn.dtcsp.cn