急求!用89C51单片机设计4*4矩阵式键盘计算器程序

要求:1)定义键盘按键,5个位数字键9,4,6,8,C;3个功能键:+,/,=
2)可进行三位十进制加法运算
3)可进行两位16进制出发运算
4)用汇编语言

第1个回答  2009-09-25
这是郭天祥老师写的:

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
sbit key1=P3^4;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0};
uchar num,temp,num1;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
uchar keyscan();
void display(uchar aa);
void main()
{
num=17;
dula=1;
P0=0;
dula=0;
wela=1;
P0=0xc0;
wela=0;

while(1)
{
display(keyscan());
}
}
void display(uchar aa)
{
dula=1;
P0=table[aa-1];
dula=0;
}
uchar keyscan()
{
P3=0xfe;
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xee:num=1;
break;
case 0xde:num=2;
break;
case 0xbe:num=3;
break;
case 0x7e:num=4;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}

P3=0xfd;
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xed:num=5;
break;
case 0xdd:num=6;
break;
case 0xbd:num=7;
break;
case 0x7d:num=8;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}

P3=0xfb;
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xeb:num=9;
break;
case 0xdb:num=10;
break;
case 0xbb:num=11;
break;
case 0x7b:num=12;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}

P3=0xf7;
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xe7:num=13;
break;
case 0xd7:num=14;
break;
case 0xb7:num=15;
break;
case 0x77:num=16;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
return num;

}本回答被网友采纳
第2个回答  2009-09-17
程序要结合硬件才可以 ,你是做课程设计吧?加我792758921
第3个回答  2009-09-23

这个是我设计的,工程文件及仿真文件都有了,需要可以发个邮件到我邮箱,qqrcqq@163.com,注明 键盘 就好了

89c51单片机4*4矩阵键盘编程。
CLR P1.4 MOV A,P1 ANL A,#0FH XRL A,#0FH JZ SW1 LCALL DELAY10MS JZ SW1\/\/确认有键按下,但不知道哪个,此时可以之间让蜂鸣器叫 MOV P3.0,#1\/\/蜂鸣器发声(赋1还是赋0取决你用的蜂鸣器)MOV A,P1 ANL A,#0FH CJNE A,#0EH,K1 MOV COUNT,#0 LJMP DK K1: CJNE A,#0DH,K2 ...

用89C51单片机设计4*4矩阵式键盘计算器程序 要汇编的
;延时程序和查表表格DELY4ms: MOV R6,#8 ;延时4毫秒D1: MOV R7,#248 DJNZ R7,$ DJNZ R6,D1 RETDELY10ms:MOV R6,#20 ;延时10毫秒D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 RETTABLE: DB 07H, 04H, 01H ; \/ 本表格是以键盘为参考 7 8 9 \/ DB 08H, 05H, 02H ; * 4 5 6 * DB ...

急求一个由89C51单片机的代码!要求用4*4矩阵键盘控制LED矩阵输出0~9的...
else if(k==1){shu4=0;shu1=1;shu2=0;shu3=0;P0=yima[a4];} else if(k==2){shu4=0;shu1=0;shu2=1;shu3=0;P0=yima[a3];} else if(k==3){shu4=0;shu1=0;shu2=0;shu3=1;P0=yima[a2];} k++;if(k>3)k=0;TH0=240;} main(){ EA=1;\/*开全局中断 *\/ TR...

89C51单片机 4*4矩阵键盘加流水灯问题,求个汇编程序代码。
;其实很简单,都不用判断键值,有键按下暂停2S程序如下:ORG 0000H LJMP STA ORG 000BH LJMP T0ISR ORG 0030H STA:MOV TMOD,#01H MOV TH0,#3CH MOV TL0,#0B0H SETB ET0 SETB EA MOV 30,#0FEH MOV R2,#0 CLR 00H LOOP:MOV P1,#0F0H MOV A,P1 CJNE A,#0F0H,LOOP1 SJMP LOOP...

89C51单片机的p3口接一个共阳极的数码管
\/\/单片机:使用51系列兼容的即可;\/\/4×4矩阵键盘:接在P1口;\/\/两位数码显示器: P0口输出七段码,P2口输出位选码。\/\/=== \/\/C语言程序如下。\/ 文件名: KEY_LED.c 功能 : 对4×4矩阵键盘进行输出,在数码管后两位显示按键值。\/ include <reg51.h> include <intrins.h> define uint ...

怎样用51单片机做计算器啊?
2、将仿真器的串行电缆和PC机接好,打开用户板电源。 3、通过Keil C 的IDE 开发仿真环境UV2 下载用户程序进行仿真、调试。 本回答被网友采纳 已赞过 已踩过< 你对这个回答的评价是? 评论 收起 阑珊处的野狗 高粉答主 2019-09-24 · 关注我不会让你失望 知道答主 回答量:4 采纳率:0% 帮助的人...

89c51单片机的数字钟程序?
\/\/时调整用MH_OUT: \/\/时个位 进位 时 MOV A,#5AH \/\/ CLR CY \/\/排除借位影响 SUBB A,41H JNZ HH_OUT \/\/如果(41H)值低4 与A中的低4不相同,跳到“SS_OUT”,不进位 MOV 41H,#50H INC 40HHH_OUT: \/\/时十位置0 MOV 4BH,40H \/\/为了不影响暂存器数据,把40H、41H转到4BH、4CH中进行 ...

寻求一篇数学专业关于点集拓扑的大学毕业论文,题目“连续映射的等价条件...
4. 设计阶段(程序流程图)5. 详细设计阶段(运行的截图)6. 安装调试阶段7. 设计体会1.绪论1.1信号发生器的概念信号发生器(signal generator)产生所需参数的电测试信号仪器。按其信号波形分为四大 类:①正弦信号发生器。主要用于测量电路和系统的频率特性、非线性失真、增益及灵敏度等。按其不同性能和用途还可细分...

急求一个基于89C51单片机,8255A,用矩阵键盘输入数字,并在LCD1602上显示...
E_SET()PB|=1<<2#define LCD1602_E_RST()PB&=~(1<<2)static void Delay_ms(unsigned char time){unsigned char i;while(time--){for(i=0;i<100;i++);}}static void LCD1602_WriteByte(unsigned char value,bit dataTypedef){if(dataTypedef)LCD1602_RS_SET();elseLCD1602_RS_...

单片机编程,共5题,采用89C51系列
1,如果你只有软件,只做计算,那么再main函数下定义一个变量i,类似c语言编程,做一个循环累加。在keil的调试窗口中监测i的值。(这样的操作没有什么意义,用c,vb也可以做,不要用89c51了)2,如果你是有硬件的,当然要有8位数码管把数值显示出来。就要具备BCD码知识,8位共阴或共阳数码管知识,...

相似回答