资源简介

这是用单片机和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


评论

共有 条评论