资源简介
基于单片机的4*4键盘的计算器,编译正确,有protues仿真已运行正确。用lcd1602显示数字,可以实现+、—、*、出。

代码片段和文件信息
#include
#include
#define uint unsigned int
#define uchar unsigned char
sbit lcden=P2^2;
sbit lcdrw=P2^1;
sbit lcdrs=P2^0;
uchar numtempjia=0jian=0cheng=0chu=0qing=0;
uint keykey1shu;
uchar fuhaoflag1flag=0;
uchar table[]={
0x3f0x060x5b0x4f
0x660x6d0x7d0x07
0x7f0x6f0x0};
void delay(uint z)
{
uint xy;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
bit lcd_bz()
{
bit result;
lcdrs=0;
lcdrw=1;
lcden=1;
_nop_();
_nop_();
_nop_();
_nop_();
result=(bit)(P0&0x80);
lcden=0;
return result;
}
void write_com(uchar com)
{
while(lcd_bz());
lcdrs=0;
lcden=0;
lcdrw=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_date(uchar date)
{
while(lcd_bz());
lcdrs=1;
lcden=0;
lcdrw=0;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void lcd_init()
{
lcden=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
}
void 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:key=1;num=0;break;
case 0xde:key=2;num=0;break;
case 0xbe:key=3;num=0;break;
case 0x7e:num=1;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:key=4;num=0;break;
case 0xdd:key=5;num=0;break;
case 0xbd:key=6;num=0;break;
case 0x7d:num=2;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:key=7;num=0;break;
case 0xdb:key=8;num=0;break;
case 0xbb:key=9;num=0;break;
case 0x7b:num=3;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:key=0;num=0;break;
case 0xd7:num=6;break; //清除
case 0xb7:num=5;break; //等于号
case 0x77:num=4;break; //除号
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
}
void display0(uint shu)
{
uint ge;
ge=shu;
write_date(0x30+ge);
}
void display1(uint shu)
{
uint shige;
shi=shu/10;
ge=shu%10;
write_date(0x30+shi);
write_date(0x30+ge);
}
void display2(uint shu)
{
uint baishige;
bai=shu/100;
shi=shu%100/10;
ge=shu%10;
write_date(0x30+bai);
write_date(0x30+shi);
write_date(0x30+ge);
}
void display3(uint shu)
{
uint qianbaishige;
qian=shu/1000;
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 85657 2013-04-24 12:54 计算器\a.DSN
文件 768 2013-04-26 12:15 计算器\a.PWI
文件 20716 2013-04-23 10:22 计算器\counter
文件 6496 2013-04-23 10:22 计算器\counter.hex
文件 61 2013-04-23 10:22 计算器\counter.lnp
文件 31282 2013-04-23 10:22 计算器\counter.M51
文件 1068 2013-04-23 11:08 计算器\counter.Opt
文件 1138 2013-04-23 10:22 计算器\counter.plg
文件 2034 2013-04-23 11:08 计算器\counter.Uv2
文件 0 2013-04-23 10:01 计算器\counter_Uv2.Bak
文件 6463 2013-04-23 10:21 计算器\couter.c
文件 17788 2013-04-23 10:22 计算器\couter.LST
文件 25774 2013-04-23 10:22 计算器\couter.OBJ
文件 85657 2013-04-24 12:54 计算器\Last Loaded a.DBK
文件 5115 2011-10-27 16:11 计算器\STARTUP.A51
文件 11665 2013-04-23 10:22 计算器\STARTUP.LST
文件 758 2013-04-23 10:22 计算器\STARTUP.OBJ
目录 0 2013-04-26 12:15 计算器
----------- --------- ---------- ----- ----
302440 18
相关资源
- 51 单片机 红外避障小车 大集合136
- STC8951系列单片机中方指南
- 基于MCS_51单片机的工业屏柜散热方案
- MCS_51单片机与8255A的接口设计
- 飞思卡尔单片机MC9S12XS12G128驱动(硬件
- 51单片机PWM程序,占空比、周期可调整
- 单片机和adc0809数字电压表
- PIC单片机完成的电子密码锁
- 单片机、ADC0808809设计简易数字电压表
- 51单片机多功能自行车测速仪
- 单片机做的6位时分秒数字钟
- 单片机电子时钟 闹钟 日历
- 音乐代码转换软件 单片机编程时用
- 单片机课程设计 篮球计分器
- 00
- 用51单片机实现G代码翻译
- 简易的电阻电容测量电路
- 单片机与温度传感器DS18B20的程序设计
- 51单片机基于protues的几个仿真实例
- 基于52单片机的直流电压测量
- 38k单片机红外发送代码、keil
- 51单片机PCB设计图
- PC -- 单片机的串口数据传输系统设计
- 51单片机控制舵机程序
- 武汉理工大学 单片机课程设计 16*16点
- 51单片机读取温度数据存储到SD卡中并
- 【单片机】51单片机数码管显示万年历
- 浙江工业大学2005-2006学年单片机习题
- 单片机与PC机串口通讯仿真
- 毕业设计 单片机 对讲机 protues仿真
评论
共有 条评论