采用proteus仿真时,能否导出lcd1602的显示内容?附原理图与代码

易码00 2019-05-17 08:56:15
硬件原理图如下:

我想把lcd上显示的内容实时存储到数据库中,而不是直接通过lcd1602显示,是直接复制粘贴就可以了么?

贴一下lcd1602的代码。


include "LCD1602.h"


sbit lcd_port_rs=LCD_PORT_RS;
sbit lcd_port_e=LCD_PORT_E;


///////////////////////////LCD延时,等待命令执行完//////////////////////
#ifdef MCU_STC89
void lcd_delay(char j)
{
int i=0;
while(j--)
for(i=0;i<60;i++);
}
#endif
#ifdef MCU_STC12
void lcd_delay(char j)
{
int i=0;
while(j--)
for(i=0;i<160;i++);
}
#endif
//////////////////////////////////////////////////////////////////////////////




//写入命令,下降沿写入
void lcd_en()
{
lcd_port_e=1;
lcd_delay(1);
lcd_port_e=0;
}

///////////////////////////写入内容:rs_mode 0为指令,1为数据//////////////////////
#ifdef LCD_DATA_8_LINE
void lcd_write(char rs_mode,unsigned char value)
{
lcd_port_rs=rs_mode;
LCD_PORT_DATA=value;
lcd_en();
lcd_delay(1);
}
#endif
#ifdef LCD_DATA_4_LINE
void lcd_write(char rs_mode,unsigned char value)
{
lcd_port_rs=rs_mode;
//首先发送高4位
LCD_PORT_DATA&=0x0f; //使用数据口高4位输出,低4位不变,高4位清零
LCD_PORT_DATA|=value&0xf0; //低4位不变,高4为赋值value的高4位
lcd_en();
lcd_delay(1);
//然后发送低4位
LCD_PORT_DATA&=0x0f;
LCD_PORT_DATA|=value<<4;//低4位不变,高4为赋值value的低4位
lcd_en();
lcd_delay(1);
}
#endif
//////////////////////////////////////////////////////////////////////////////


//初始化
void lcd_init()
{
lcd_delay(80); //40ms,等待VDD>4.5V
#ifdef LCD_DATA_8_LINE
lcd_write(0,0x38);//8位数据,2行显示。等待一段时间
lcd_delay(20);//10ms
lcd_write(0,0x38);//8位数据,2行显示。等待一段时间
lcd_delay(2);//1ms
#endif
#ifdef LCD_DATA_4_LINE
lcd_write(0,0x33);//8线,8线
lcd_delay(20);//10ms
lcd_write(0,0x32);//8线,4线
lcd_delay(20);//10ms
lcd_write(0,0x28);//4线,2行显示
lcd_delay(20);//10ms
#endif

lcd_write(0,0x01);//清屏
lcd_delay(10);
lcd_write(0,0x0c);//显示器开,光标关,字符不闪烁
lcd_write(0,0x06);//字符不动,光标右移
}

//指定位置写入字符,x坐标,y坐标,字符。
void lcd_write_char(unsigned char x_pos,unsigned char y_pos,char value)
{
//写入地址
x_pos&=0x0f;//限制范围
y_pos&=0x01;//限制范围
if(y_pos) x_pos+=0x40;//实际位置
x_pos+=0x80;// 设置地址

lcd_write(0,x_pos);//写入地址
lcd_delay(5);
lcd_write(1,value);//写入数据
}


//写入正行,字符串长度应小于16,不足则不覆盖
void lcd_write_line(char line,char* str)
{
char i=0;
for(i=0;i<16;i++)
{
lcd_write_char(i,line,*(str+i));
}
}

//写入字符串,(x坐标,y坐标,字符串,长度)
void lcd_write_str(char x,char y,char* str,char len)
{
char i=0;
for(i=0;i<len;i++)
{
lcd_write_char(x+i,y,*(str+i));
}
}



//写入数字(x坐标,y坐标,数据,整数长度,小数长度)
//整数长度,小数长度=0时候为不显示。 小数长度要小于5
void lcd_write_num(char x,char y,double num,char len1,char len2)
{
long left=0; //小数点左边
long right=0; //小数点右边
signed char i=0; //循环变量
char ubNegFlag = 0; //负数标志,1为负数,0为正数
if(num<0){num*=-1;ubNegFlag=1;}
left=(long)num; // 小数点左边
right=((long)(num*100000))%100000; //小数点右边,取5个有效数字
if(len1>0) //如果需要显示整数
{
for(i=x+len1-1;i>=x;i--) //计算整数区域
{
if((i == x) & (ubNegFlag == 1)) lcd_write_char(x,y,'-');//负数的话,显示负号
else lcd_write_char(i,y,(left%10)+'0'); // 显示出来
left/=10; // 循环左移
}
}
if(len2>0) //如果需要显示小数
{
lcd_write_char(x+len1,y,'.'); // 显示小数点
for(i=x+len1+1;i<=x+len1+len2;i++) //显示区域
{
lcd_write_char(i,y,((right/10000)%10)+'0'); //显示出来
right*=10; //循环移动
}
}
}

...全文
410 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
坤小白 2019-05-22
  • 打赏
  • 举报
回复
单片机加外部储存呢
易码00 2019-05-17
  • 打赏
  • 举报
回复
引用 1 楼 智者知已应修善业的回复:
不知道你要做什么,仿真软件有你想要的功能? 如何是实际应用,单片机内倒是有存储片可供使用! 导出到数据库51单片机能打开数据库? 假如使单片机与电脑进行通信,把数据送电脑上是有可以把数据存入数据库.
我这就是仿真。是想做一个空气质监测模块。但是传感器太贵了(3000一个)买不起。于是就只做了仿真,没有硬件。假如有硬件的话,好像ZigBee加WiFi就能传数据了。但是只有仿真我就不知道怎么办… 我现在这个是可以走通的,运行是lcd上可以显示温湿度(dht11)与另外五个滑动变阻器代表的值。 我现在想把这些值导出来,先存在本地,再想着传数据库
  • 打赏
  • 举报
回复
不知道你要做什么,仿真软件有你想要的功能? 如何是实际应用,单片机内倒是有存储片可供使用! 导出到数据库51单片机能打开数据库? 假如使单片机与电脑进行通信,把数据送电脑上是有可以把数据存入数据库.
proteus仿真基本教程,第6章 控制电路设计与仿真 .........................................................................................................................2 6.1 Proteus系统仿真基础 ........................................................................................................................2 6.2 Proteus中的单片机模型 ....................................................................................................................5 6.3 51系列单片机系统仿真 ....................................................................................................................7 6.3.1 51系列单片机基础 ................................................................................................................7 6.3.2 在Proteus中进行源程序设计与编译 ..............................................................................8 6.3.3 在Keil μVision中进行源程序设计与编译 ................................................................. 11 6.3.4 Proteus和Keil μVision联合调试 ................................................................................... 15 6.4 用51单片机实现电子秒表设计实例 ....................................................................................... 18 6.5 AVR系列单片机仿真 ...................................................................................................................... 20 6.5.1 AVR系列单片机基础 ......................................................................................................... 21 6.5.2 Proteus和IAR EWB for AVR联合开发 ....................................................................... 22 6.6 用AVR单片机实现数字电压表设计实例 .............................................................................. 28

6,125

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 硬件设计
社区管理员
  • 硬件设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧