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(); //按键地址函数}}
阅读全文
1 0
- 51单片机实验 2017年11月27日
- 51单片机实验 2017年11月16日
- 51单片机实验2017年11月17日
- 51单片机实验2017年11月20日
- 51单片机实验 2017年11月22日
- 51单片机实验2017年12月4日
- 51单片机实验 2017年12月13日
- 2017年11月19日实验感想
- 2013年11月1日单片机C语言总结
- 2017年3月9日Java上机实验项目
- 安卓的第一份实验单【2014年10月15日布置,11月11日上交】
- 【2017年11月27日】CSDN博客更新周报
- 2017年1月27日
- 2017年2月27日手记
- 2017年9月27日感
- 2007年11月27日
- 2010年11月27日~
- /*2017年1月11日*/日志
- Android 4.4.2开机动画支持系统语言切换
- 重复引用jar包问题和降低编译版本问题总结
- iOS xcode ~pilst(配置)
- 掌柜大作战(23):京东Me,移动办公,应有尽有
- 拥塞控制分析之DCTCP
- 51单片机实验 2017年11月27日
- 每天一道LeetCode-----重新实现开方运算sqrt(x),只返回整数部分即可
- ArcGIS API for JavaScript实现动态拖拽画圆
- [leetcode]#118. Pascal's Triangle
- request返回json格式时的编码和提取信息问题
- LeetCode-Easy刷题(2) Reverse Integer
- 【NOIP2013模拟联考7】OSU
- cookie和session的区别
- BZOJ1207(HNOI2004)[打鼹鼠]--最长升