单片机的实用程序代码

源代码在线查看: 矩阵键盘.c

软件大小: 1496 K
上传用户: dlvvb
关键词: 单片机 代码 实用程序
下载地址: 免注册下载 普通下载 VIP

相关代码

				/********************************************************************
				* 文件名  : 矩阵键盘.c
				* 描述    :  该文件实现了 4 * 4 键盘的试验。通过数码管的最后一位来显示
							 当前的按键值。		 
				* 创建人  : 东流,2009年4月10日
				* 版本号  : 2.0
				*********************************************************************/
				#include
				#include
				
				#define uint unsigned int
				#define uchar unsigned char
				
				uchar code table[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
				
				/********************************************************************
				* 名称 : Delay_1ms()
				* 功能 : 延时子程序,延时时间为 1ms * x
				* 输入 : x (延时一毫秒的个数)
				* 输出 : 无
				***********************************************************************/
				void Delay_1ms(uint i)//1ms延时
				{
					uchar x,j;
					for(j=0;j					for(x=0;x				}
				 
				
				/********************************************************************
				* 名称 : Keyscan()
				* 功能 : 实现按键的读取。下面这个子程序是按处理 矩阵键盘 的基本方法处理的。
				* 输入 : 无
				* 输出 : 按键值
				***********************************************************************/
				uchar Keyscan(void)
				{
					uchar i,j, temp, Buffer[4] = {0xfe, 0xfd, 0xfb, 0xf7};			//让矩阵键盘的每行分别为低电平
					for(j=0; j					{
						P1 = Buffer[j];
						temp = 0x10;                                                                                                                                                                    
						for(i=0; i						{
							if(!(P1 & temp)) 		//判断P1口高4位某一行为低电平
							{
								return (i+j*4);		//返回键码
							}
							temp 						}	
					}
				}
				
				/********************************************************************
				* 名称 : Main()
				* 功能 : 主函数
				* 输入 : 无
				* 输出 : 无
				***********************************************************************/
				void Main(void)
				{
					uchar Key_Value;  //读出的键值
					while(1)
					{
						P1 = 0xf0;				
						if(P1 != 0xf0)			//判断有无按键按下
						{
							Delay_1ms(20);		//按键消抖
							if(P1 != 0xf0)		//第二次判断有无按键按下
							{
								Delay_1ms(20);  //按键消抖
								if(P1 != 0xf0)	//第三次判断有无按键按下
								{
									Key_Value = Keyscan();		
								}
							}
						}
						P0 = table[Key_Value];
						P2 = 0x07;	
					}
				}			

相关资源