资源简介
这是用单片机和LCD1602实现的简易计算器,里面有完整的程序和Proteus仿真图,单片的型号可以选择多种,参照电路图就可以焊接出来。
如果喜欢电子设计的和想学习单片机的同学可以下载下来看看,有不足之处多多指教,大家共同进步嘛!
代码片段和文件信息
#include
#include
#include
#include
#include
#include “LCD1602.h“
void shortdelay(uchar i)//短延时
{
for(;i>0;i--);
}
//长延时
void longdelay(uint i)
{
uint j;
for(;i>0;i--)
{for(j=100;j>0;j--);}
}
//延时程序
void delay(int i)
{int j;
for(;i>0;i--)
for(j=0;j<100;j++);
}
//初试状态
void io_init()
{P1=0xff;
}
//?---------------------------键盘扫描部分-----------------------------//
unsigned char key_scan()
{ unsigned char key;
unsigned char temp;
uint flag;
io_init();
P1=0xf0;
flag=0;
loop: temp=P1^0xf0;
while(temp)
{
P1=0xfe;
delay(1);
if((P1&0xfe)!=0xfe)
switch(P1)
{
case 0xee: key=0x11;flag=1;break;
case 0xde: key=0x12;flag=1;break;
case 0xbe: key=0x13;flag=1;break;
case 0x7e: key=0x14;flag=1;break;
}
if(flag)
goto exit;
else
P1=0xfd;
delay(1);
if((P1&0xfd)!=0xfd)
switch(P1)
{
case 0xed: key=0x21;flag=1;break;
case 0xdd: key=0x22;flag=1;break;
case 0xbd: key=0x23;flag=1;break;
case 0x7d: key=0x24;flag=1;break;
}
if(flag)
goto exit;
else
P1=0xfb;
delay(1);
if((P1&0xfb)!=0xfb)
switch(P1)
{
case 0xeb: key=0x31;flag=1;break;
case 0xdb: key=0x32;flag=1;break;
case 0xbb: key=0x33;flag=1;break;
case 0x7b: key=0x34;flag=1;break;
}
if(flag)
goto exit;
else
P1=0xf7;
delay(1);
if((P1&0xf7)!=0xf7)
switch(P1)
{
case 0xe7: key=0x41;flag=1;break;
case 0xd7: key=0x42;flag=1;break;
case 0xb7: key=0x43;flag=1;break;
case 0x77: key=0x44;flag=1;break;
}
exit: return key;
}
if(temp==0)
goto loop;
}
//---------------------------------键盘扫描完--------------------------------------------//
//---------------------------------显示初始化?----------------------------------------//
//P0口初始化
void initpindata(bit i)
{
if(i==1) pindata=0xff;
else pindata=0X00;
}
//寄存器选择信号
void setRS(bit i)
{
if(i==1) pinRS=1;
else pinRS=0;
}
//读写操作控制
void setRW(bit i)
{
if(i==1) pinRW=1;
else pinRW=0;
}
//使能信号
void setE(bit i)
{
if(i==1) pinE=1;
else pinE=0;
}
//读BF以及AC的值
uint read_BF_AC()
{
uint temp;
initpindata(1);
setRS(0);
setRW(1);
setE(1);
shortdelay(1);
temp=pindata;
shortdelay(10);
setE(0);
return(temp);
}
//判忙
bit statuscheck()
{
return((bit)(read_BF_AC()&0x80));
}
//写指令函数
void writeinstruc(uint instruc)
{
while(statuscheck());
initpindata(0);
setRS(0);
setRW(0);
setE(0);
pindata=instruc;
//short delay(1);
setE(1);
shortdelay(10);
setE(0);
}
//写数据到RAM
void writedata(uint data1)
{
initpindata(0);
setRS(1);
setRW(0);
setE(0);
pindata=data1;
setE(1);
shortdelay(10);
setE(0);
}
//从RAM中读数据函数
uint readdata(void)
{
uint temp;
initpindata(1);
setRS(1);
setRW(1);
setE(1);
shortdelay(1);
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 90081 2009-05-31 14:58 LCD1602计算器\EXAMPLE1.DSN
文件 768 2009-09-02 21:27 LCD1602计算器\EXAMPLE1.PWI
文件 90154 2009-05-31 14:55 LCD1602计算器\Last Loaded EXAMPLE1.DBK
文件 23345 2009-06-11 22:18 LCD1602计算器\LCD1602
文件 6805 2008-04-30 16:20 LCD1602计算器\LCD1602.c
文件 1654 2008-04-22 09:11 LCD1602计算器\LCD1602.h
文件 11190 2009-06-11 22:18 LCD1602计算器\LCD1602.hex
文件 31 2009-06-11 22:18 LCD1602计算器\LCD1602.lnp
文件 13111 2009-06-11 22:18 LCD1602计算器\LCD1602.LST
文件 26282 2009-06-11 22:18 LCD1602计算器\LCD1602.M51
文件 25714 2009-06-11 22:18 LCD1602计算器\LCD1602.OBJ
文件 1550 2009-06-11 23:31 LCD1602计算器\LCD1602.Opt
文件 164 2009-06-11 23:31 LCD1602计算器\LCD1602.plg
文件 2113 2009-06-11 22:18 LCD1602计算器\LCD1602.Uv2
文件 1375 2009-06-11 23:30 LCD1602计算器\LCD1602_Opt.Bak
文件 2147 2009-05-31 14:36 LCD1602计算器\LCD1602_Uv2.Bak
文件 70067 2009-06-13 23:07 LCD1602计算器\计算器.DSN
文件 742 2009-09-02 21:30 LCD1602计算器\计算器.PWI
文件 1691 2009-06-14 18:25 LCD1602计算器\计算器.SDF
目录 0 2009-09-02 21:30 LCD1602计算器
----------- --------- ---------- ----- ----
368984 20
- 上一篇:达尔优机械键盘合金板108键机械键盘编程器固件
- 下一篇:PLC 全自动洗衣机
相关资源
- 51单片机热敏电阻测温查表程序
- 单片机基础第三版课后答案
- 多项式相乘一元稀疏多项式简单计算
- 坦克大战—单片机+proteus仿真
- 基于单片机的温室大棚温湿度亮度自
- 电风扇模拟控制系统设计
- 基于AT89C51单片机的电子计时牌设计
- 用51单片机设计的GPS定位系统论文
- 基于51单片机的CC1100CC1101发送和接收的
- 基于C51单片机的简单控制灯光的程序
- 51单片机 经典4位数码管显示,带闪烁
- 三国杀武将张昌蒲技能计算器
- 基于单片机的智能交通灯控制系统设
- 基于单片机的液位控制系统设计
- 51单片机控制BMP180气压传感器 并通过
- Ansoft场计算器
- 单片机控制冒泡排序 数码管显示
- max197的程序与单片机通讯含protel原理
- DS18B20温度采集+串口发送+模块化编程
- 基于单片机设计的脉搏测量仪(毕设
- 用汇编语言写的51单片机电子闹钟
- 基于单片机的9999秒倒计时器的设计
- 基于单片机的简易数字电压表的设计
- xcode 简易计算器
- LED点阵 4位16*16LED点阵广告牌 Proteus单
-
ob
jective-c的计算器 - 基于AT89S52单片机LCD数字测速仪的设计
- 基于51单片机带时间及声光提示单片机
- fpga vhdl计算器
- 51单片机课程设计数字温度计报告
评论
共有 条评论