矩阵键盘状态机之74hc164驱动数码管依次显示键值

上传人:今*** 文档编号:106022507 上传时间:2019-10-14 格式:DOC 页数:14 大小:123.51KB
返回 下载 相关 举报
矩阵键盘状态机之74hc164驱动数码管依次显示键值_第1页
第1页 / 共14页
矩阵键盘状态机之74hc164驱动数码管依次显示键值_第2页
第2页 / 共14页
矩阵键盘状态机之74hc164驱动数码管依次显示键值_第3页
第3页 / 共14页
矩阵键盘状态机之74hc164驱动数码管依次显示键值_第4页
第4页 / 共14页
矩阵键盘状态机之74hc164驱动数码管依次显示键值_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《矩阵键盘状态机之74hc164驱动数码管依次显示键值》由会员分享,可在线阅读,更多相关《矩阵键盘状态机之74hc164驱动数码管依次显示键值(14页珍藏版)》请在金锄头文库上搜索。

1、用视图Web模式看uchar code smg_duan=/数码管(共阴)编码0-F,全灭; 按键对应的数字不是上图,而是-这里下面的 /用IO口P0,所以把A B C D E F G DP分别接到P00 P01 P02 P03 P04 P05 P06PO7 所以编码如下 - -|-1-|-2-|-3-|- -|-4-|-5-|-6-|-0X3f,0X06,0X5B,0X4f,0X66,0X6D,0X7D,0x07,0x7f,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0X00 -|-7-|-8-|-9-|-/可以把0x71或任意一个改为0x00,这样就可以按下0x7

2、1这个案件时清楚显示了 -|-C-|-0-|-E-|-/*0xfC,0x0C,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6,0xEE,0x3E,0x9C,0x7A,0x9E,0x8E,0x00/多写了0x00,代表段选全部熄灭*/;0X3f,0X06,0X5B,0X4f,0X66,0X6D,0X7D,0x07,0x7f,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0X00/可以把0x71或任意一个改为0x00,这样就可以按下0x71这个案件时清楚显示了完整程序如下:/*= * 开发人员:laowang * 当前版本:V1.0 * 创建

3、时间:11/26/2013 * 修改时间:04/21/2017 * 功能说明:对4*3矩阵键盘扫描,用4位共阴数码管进行显示,刚开始时不亮,依次按下按键时 数码管依次显示0-F,扫描方法为状态机方法+定时器中断 * 修改人员:梁超云 *=*/#include#includeDefine.h#includedisplay.h#includematrixkeyscan.h#include 74HC164.hvoid Timer0_init();/定时器初始化函数uint flag1=0;uint flag=0; /按键扫描标志,每中断一次,扫描一次bit power_on=1;/主函数void m

4、ain() uchar key_state=0;uchar readkey;readkey=0xff;Timer0_init();Display_init();/使之不亮while(1) if(flag=1) flag=0;flag1+;if(flag1=4)flag1=0;readkey=Keyscan();if (power_on=0)power_on=1;num2+;if(num2=4)num2=0;DisplayBUFF(readkey);Display(); void Timer0() interrupt 1 /TH0=0xD8; /10Ms产生一次中断/TL0=0xF0;/TH0=

5、0xB1; /20Ms产生一次中断/ TL0=0xE0;/TH0=0xec; /5Ms产生一次中断/ TL0=0x78;TH0=0x63; /40Ms产生一次中断 TL0=0xc0; flag+;void Timer0_init()/TH0=0xD8; /12MHz-10Ms产生一次中断/ TL0=0xF0;/TH0=0xB1; /20Ms产生一次中断/ TL0=0xE0;/TH0=0xec; /5Ms产生一次中断/ TL0=0x78;TH0=0x63; /40Ms产生一次中断 TL0=0xc0;EA=1;ET0=1; TR0=1;/*=硬件电路= *说明:数码管为共阴数码管,驱动方式为74h

6、c164 扫描方式为动态扫描 *=*/梁超云改为P0.0-P0.7直接数码管的A-H,P2接数码管位选#include#includeDefine.h/把常用的宏定义写成了头文件,包含进来#includedisplay.h#include 74HC164.h#includematrixkeyscan.huchar segbuff4; uchar num2=0;/sbit wela=P35;/位选/sbit dula=P34;/段选uchar code smg_duan=/数码管(共阴)编码0-F,全灭; /用IO口P0,所以把A B C D E F G GP分别接到P00 P01 P02 P0

7、3 P04 P05 P06PO7 所以编码如下0X3f,0X06,0X5B,0X4f,0X66,0X6D,0X7D,0x07,0x7f,0x6F,0x77,0x7C,0x39,0x5E,/*0x79*/0x00,0x71,0X00 /用IO口P0,所以把A B C D E F G GP分别接到P07 P06 P05 P04 P03 P02 P01 PO0 所以编码如下/可以把0x79或任意一个改为0x00,这样就可以按下0x79这个案件时清楚显示了/0xfC,0x0C,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6,0xEE,0x3E,0x9C,0x7A,/*0

8、x9E*/0X00,0x8E,0x00/多写了0x00,代表段选全部熄灭;/uchar code smg_wei=0xfe,0xfd,0xfB,0xf7;/数据向左移动。要右移的话就uchar code smg_wei=0xf7,0xfB,0xfd,0xfe;/*= *函数名称:Display_init() *功 能:对数码管进行初始化操作 *入口参数: *出口参数:void *说 明:刚上电时,所有的数码管均不显示 *=*/void Display_init()P1=0x00; /将所有的位选关闭,所有数码管不亮,/wela=1;/wela=0;P2=0xff; /将段选关闭。/dula=1

9、; /dula=0;void Display()sendbyte(segbuffflag1%4);P2=smg_wei(flag1-1)%4;/保证每次都从左边开始亮,其实是看数码管硬件怎么排位置的/P2=smg_wei(flag1+3)%4;/*= *函数名称:Display(uchar) *功 能:数码管静态扫描 *入口参数: *出口参数:void *说 明:进行段选的显示。因为位选在刚开始的时候已经弄好了 *=*/void DisplayBUFF(uchar num1)/更新显存 uchar i,x;/wela=1;i=num2%4;/四位数码管所以%4,6位%6,8位%8,以此类推se

10、gbuffi=smg_duannum1;x=smg_duannum1;if(x=0x00)segbuff0=0x00;segbuff1=0x00;segbuff2=0x00;segbuff3=0x00;num2=0;flag1=0;/清空缓存/sendbyte(segbuffi);/wela=0;/dula=1;/dula=0;/*=硬件电路= * *说明:矩阵键盘为4*4,数据口为P0,行线为P0.0-P0.3,列线为P0.4-P0.720170418梁超云改为P0口,显示字形码接在P1,位在P2 *=*/#include#includeDefine.h#includematrixkeyscan.h#define key P0/矩阵键盘的数据口#define no_key 0xff

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号