51单片机实验 2017年11月27日

来源:互联网 发布:网络攻击与防范论文 编辑:程序博客网 时间:2024/06/04 19:57
2017年11月29日
矩阵按键程序
#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit we = P2^7;sbit du = P2^6;uchar code leddata[]={                  0x3F,  //"0"                0x06,  //"1"                0x5B,  //"2"                0x4F,  //"3"                0x66,  //"4"                0x6D,  //"5"                0x7D,  //"6"                0x07,  //"7"                0x7F,  //"8"                0x6F,  //"9"                0x77,  //"A"                0x7C,  //"B"                0x39,  //"C"                0x5E,  //"D"                0x79,  //"E"                0x71,  //"F"                0x76,  //"H"                0x38,  //"L"                0x37,  //"n"                0x3E,  //"u"                0x73,  //"P"                0x5C,  //"o"                0x40,  //"-"                0x00,  //熄灭                0x00  //自定义                         };void delay(uint z){uint x,y;for(x = z;x > 0;x --)for(y = 112;y > 0;y --);}//嵌套延时函数uchar KeyScan()  //按键判断函数{uchar cord_l,cord_h;               //声明列和行函数名P3 = 0xf0;    //将0xf0赋给P3口,将行置高电平列置低电平//if((P3 & 0xf0) != 0xf0)if(P3 != 0xf0)              //当行和列不再是初始的时候代表有按键被按下{delay(5);                          //软件消抖延时//if((P3 & 0xf0) != 0xf0)if(P3 != 0xf0)            //确定有按键按下{cord_l = P3 & 0xf0;  //按位与运算,将结果赋给cord_l函数P3 = cord_l | 0x0f;  //按位或运算,将运算结果赋给P3口                           //扫描矩阵键盘的每一列将其结果赋给cord_l函数cord_h = P3 & 0x0f;// 按位与,将P3口的行与0x0f中不同的二进制数置为低电平while((P3 & 0x0f) != 0x0f);//不断的判断按键是否按下return(cord_l + cord_h);        //列和行的按键地址}}}void KeyPro()                    //按键地址函数{switch(KeyScan())       //按键地址选择语句块{                       //当按键地址等于以下之一时则选择将后面leddata数组中的数字送入数码管//第一行case 0xee:P0 = leddata[0]; break; //第一列case 0xde:P0 = leddata[1]; break; //第二列case 0xbe:P0 = leddata[2]; break; //第三列case 0x7e:P0 = leddata[3]; break; //第四列   //第二行case 0xed:P0 = leddata[4]; break; //第一列case 0xdd:P0 = leddata[5];  break; //第二列case 0xbd:P0 = leddata[6];break; //第三列case 0x7d:P0 = leddata[7];break; //第四列//第三行case 0xeb:P0 = leddata[8];break; //第一列case 0xdb:P0 = leddata[9];  break; //第二列case 0xbb:P0 = leddata[10];break; //第三列case 0x7b:P0 = leddata[11];break; //第四列//第四行case 0xe7:P0 = leddata[12];break; //第一列case 0xd7:P0 = leddata[13]; break; //第二列case 0xb7:P0 = leddata[14]; break; //第三列case 0x77:P0 = leddata[15]; break; //第四列}}void main() //主函数开始{we = 1; //打开位选P0 = 0; //打开所有8组数码管we = 0; //打开位选du = 1;            //打开段选P0 = leddata[22];    //向P0口段选送一个初始显示数但此地不可为空while(1)            //循环执行按键地址程序{KeyPro();   //按键地址函数}}
原创粉丝点击