硬體原理圖如下:

我想把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=https://bbs.csdn.net/topics/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; //回圈移動
}
}
}
uj5u.com熱心網友回復:
不知道你要做什么,仿真軟體有你想要的功能?如何是實際應用,單片機內倒是有存盤片可供使用!
匯出到資料庫51單片機能打開資料庫?
假如使單片機與電腦進行通信,把資料送電腦上是有可以把資料存入資料庫.
uj5u.com熱心網友回復:
我這就是仿真。是想做一個空氣質監測模塊。但是傳感器太貴了(3000一個)買不起。于是就只做了仿真,沒有硬體。假如有硬體的話,好像ZigBee加WiFi就能傳資料了。但是只有仿真我就不知道怎么辦…
我現在這個是可以走通的,運行是lcd上可以顯示溫濕度(dht11)與另外五個滑動變阻器代表的值。
我現在想把這些值匯出來,先存在本地,再想著傳資料庫
uj5u.com熱心網友回復:
單片機加外部儲存呢轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/125463.html
標籤:硬件設計
上一篇:Android最優雅SharedPreferences封裝(Kotlin版本)
下一篇:LCD1602x顯示錯誤,求助!
