用C语言写一个基于单片机89c51的计算器程序,p1口为4*4键盘,P0口控制共阴数码管! 10

 我来答
xyz0526604
2012-07-16 · TA获得超过135个赞
知道答主
回答量:25
采纳率:0%
帮助的人:11.3万
展开全部
include <reg52.h>//包含头文件
#define uchar unsigned char
#define uint unsigned int
unsigned char const dofly[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//0-F,数码管来显示按下键的值。
uchar keyscan(void); //主要的矩阵键盘扫描函数。
void delay(uint i);
void main()
{
uchar key;
P2=0x00;
P3=0xff;//1数码管亮 按相应的按键,会显示按键上的字符
while(1)
{
key=keyscan();//调用键盘扫描,
switch(key)
{
case 0xee:P2=dofly[0];break;//c k1
case 0xed:P2=dofly[1];break;//d k2
case 0xeb:P2=dofly[2];break;//e k3
case 0xe7:P2=dofly[3];break;//f k4

case 0xde:P2=dofly[4];break;//8
case 0xdd:P2=dofly[5];break;//9
case 0xdb:P2=dofly[6];break;//a
case 0xd7:P2=dofly[7];break;
case 0xbe:P2=dofly[8];break;//4
case 0xbd:P2=dofly[9];break;//5
case 0xbb:P2=dofly[10];break;//6
case 0xb7:P2=dofly[11];break;
case 0x7e:P2=dofly[12];break;
case 0x7d:P2=dofly[13];break;//1
case 0x7b:P2=dofly[14];break;//2
case 0x77:P2=dofly[15];break;//3
//b//7//0 按下相应的键显示相对应的码值 原理就是高四位一列低四位一列的组
//合。0111 1110 7e 0表示按键后为0,1表示没有按键按下的。即P3.7与P3.1连接为低电平,为S1键
//其他类推。
/*case 0x7d:P2=dofly[1];break;//1
case 0x7b:P2=dofly[2];break;//2
case 0x77:P2=dofly[3];break;//3
case 0xbe:P2=dofly[4];break;//4
case 0xbd:P2=dofly[5];break;//5
case 0xbb:P2=dofly[6];break;//6
case 0xb7:P2=dofly[7];break;//7
case 0xde:P2=dofly[8];break;//8
case 0xdd:P2=dofly[9];break;//9
case 0xdb:P2=dofly[10];break;//a
case 0xd7:P2=dofly[11];break;//b
*/
}
}
}

uchar keyscan(void)//键盘扫描函数,使用行列反转扫描法 比如:行为低电位,列为高四位
{
uchar cord_h,cord_l;//行列值
P1=0x0f; //行线输出全为0
cord_h=P1&0x0f; //读入列线值
if(cord_h!=0x0f) //先检测有无按键按下
{
delay(100); //去抖
if(cord_h!=0x0f)
{
cord_h=P1&0x0f; //读入hang线值
P1=cord_h|0xf0; //输出当前列线值
cord_l=P1&0xf0; //读入lie线值
return(cord_l+cord_h);//键盘最后组合码值
}
}return(0xff); //返回该值
}
void delay(uint i)//延时函数
{
while(i--);
}
cih16
2012-07-16
知道答主
回答量:39
采纳率:0%
帮助的人:15.2万
展开全部
学习
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
qiaotokong
2012-07-16
知道答主
回答量:31
采纳率:0%
帮助的人:12.5万
展开全部
正在看师兄写的计算器程序,用模块化编程和面向对象思想设计的,想要的话,我发给你吧,邮箱是多少
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式