久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 5885|回復(fù): 6
打印 上一主題 下一主題
收起左側(cè)

關(guān)于單片機(jī)+lcd1602在proteus仿真中亮了但無(wú)顯示問(wèn)題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
根據(jù)原理圖在proteus中仿真,但是代碼在實(shí)物上可以跑,仿真就沒(méi)有顯示了

原理圖和proteus圖
單片機(jī)代碼如下,純小白,希望幫幫
#include <reg52.h>

#define LCD1602_DB P2//lcd相關(guān)端口
#define state_wait 0 //系統(tǒng)等待按鍵信號(hào)狀態(tài)
#define state_temp_choose 1//等待光電傳感器信號(hào),選擇溫度狀態(tài)


/***lcd相關(guān)端口***/
sbit LCD1602_RS = P0^7;
sbit LCD1602_RW = P0^6;
sbit LCD1602_E = P0^5;


sbit key_start = P3^5;//啟動(dòng)按鍵
sbit temp_up = P2^4;//繼電器開(kāi)關(guān)
sbit temp_set = P3^4;//光電傳感器讀取

void InitLcd1602();//lcd初始化
void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str);//lcd顯示函數(shù)

int        readtemp();//讀取溫度傳感器值,實(shí)際溫度*10
int now_time = 0;
int state = state_wait;//系統(tǒng)狀態(tài)
int set_temp = 0;//設(shè)定溫度
char my_char[11] = "temp = 00.0";
char my_time[10] = "time = 000";
int show_flag = 0;//防止lcd刷新過(guò)于頻繁,1秒刷新一次

void main()
{
        InitLcd1602();//lcd初始化
        LcdShowStr(1, 0, "System ready");//lcd顯示系統(tǒng)準(zhǔn)備完成
        /***定時(shí)器相關(guān)配置,定時(shí)50ms,方便計(jì)算***/
        TMOD = 0x01;//啟動(dòng)定時(shí)器0
        TH0 = (65535-45872)/256;
        TL0 = (65535-45872)%256;
        EA = 1;
        ET0 = 1;
        
        while(state == state_wait)//檢測(cè)啟動(dòng)按鍵
        {
                if(key_start == 0)
                {
                        state = state_temp_choose;
                        TR0 = 1;//啟動(dòng)定時(shí)器
                }
        }
        LcdShowStr(1, 0, "             ");//lcd顯示系統(tǒng)啟動(dòng)
        while(state == state_temp_choose)//檢測(cè)光電傳感器數(shù)據(jù)
        {
                if(temp_set == 0)
                {
                        set_temp = readtemp();
                        TR0 = 0;//停止計(jì)時(shí)
                }
        }
        set_temp = readtemp();
        my_char[7] = (int)(set_temp%1000/100) + '0';//提取溫度十位并轉(zhuǎn)換
        my_char[8] = (int)(set_temp%100/10) + '0';//提取溫度個(gè)位并轉(zhuǎn)換
        my_char[10] = (int)(set_temp%10) + '0';//顯示小數(shù)點(diǎn)后一位
        LcdShowStr(1, 1, my_char);//lcd顯示系統(tǒng)確定溫度成功
        while(1);
}
void T0_time() interrupt 1 //50ms中斷,每1秒(20次進(jìn)入)刷新時(shí)間與溫度顯示
{
        TH0 = (65535-45872)/256;
        TL0 = (65535-45872)%256;
        show_flag ++;
        if(show_flag >= 20)
        {
                show_flag = 0;
                now_time++;
                my_time[7] = (int)(now_time/100) + '0';//提取時(shí)間百位并轉(zhuǎn)換
                my_time[8] = (int)(now_time%100/10) + '0';//提取時(shí)間十位并轉(zhuǎn)換
                my_time[9] = (int)(now_time%10) + '0';//提取時(shí)間個(gè)位并轉(zhuǎn)換
                LcdShowStr(1, 0, my_time);//lcd顯示時(shí)間
                set_temp = readtemp();
                my_char[7] = (int)(set_temp/100) + '0';//提取溫度十位并轉(zhuǎn)換
                my_char[8] = (int)(set_temp%100/10) + '0';//提取溫度個(gè)位并轉(zhuǎn)換
                my_char[10] = (int)(set_temp%10) + '0';//顯示小數(shù)點(diǎn)后一位
                LcdShowStr(1, 1, my_char);//lcd顯示溫度
        }
}
int readtemp()
{
        return 345;
}
void LcdWaitReady()//lcd等待
{
        unsigned char sta;
        LCD1602_DB = 0xFF;
        LCD1602_RS = 0;
        LCD1602_RW = 1;
        do{
                LCD1602_E = 1;
                sta = LCD1602_DB;
                LCD1602_E = 0;
        } while (sta & 0x80);
}

void LcdWriteCmd(unsigned char cmd)//lcd寫指令
{
        LcdWaitReady();
        LCD1602_RS = 0;
        LCD1602_RW = 0;
        LCD1602_DB = cmd;
        LCD1602_E = 1;
        LCD1602_E = 0;
}

void LcdWriteDat(unsigned char dat)//lcd寫數(shù)據(jù)
{
        LcdWaitReady();
        LCD1602_RS = 1;
        LCD1602_RW = 0;
        LCD1602_DB = dat;
        LCD1602_E = 1;
        LCD1602_E = 0;
}
void LcdSetCursor(unsigned char x, unsigned char y)//設(shè)定坐標(biāo)
{
        unsigned char addr;
        if (y == 0)
        addr = 0x00 + x;
        else
        addr = 0x40 + x;
        LcdWriteCmd(addr | 0x80);
}
void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str)//字符串顯示代碼
{
        LcdSetCursor(x, y);
        while (*str != '\0')
        {
                LcdWriteDat(*str++);
        }
}
void InitLcd1602()//lcd初始化
{
        LcdWriteCmd(0x38);
        LcdWriteCmd(0x0C);
        LcdWriteCmd(0x06);
        LcdWriteCmd(0x01);
}

51hei圖片20220513192626.png (182.34 KB, 下載次數(shù): 27)

原理圖

原理圖

51hei圖片20220513192619.png (176.83 KB, 下載次數(shù): 23)

proteus

proteus
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:1026277 發(fā)表于 2022-5-13 19:30 | 只看該作者
仿真圖是這樣的

仿真.png (93.95 KB, 下載次數(shù): 28)

仿真.png
回復(fù)

使用道具 舉報(bào)

板凳
ID:96682 發(fā)表于 2022-5-14 07:08 | 只看該作者
只因 RP1 引腳①?zèng)]接  Vcc 相當(dāng)于沒(méi)接上拉電阻,以AT 89C 的特點(diǎn),LCD 是不會(huì)顯示任何信息的
回復(fù)

使用道具 舉報(bào)

地板
ID:390416 發(fā)表于 2022-5-14 08:08 | 只看該作者
LCD1602液晶最新資料 說(shuō)明了具體的時(shí)間要求 http://www.zg4o1577.cn/bbs/dpj-205768-1.html
回復(fù)

使用道具 舉報(bào)

5#
ID:824490 發(fā)表于 2022-5-14 09:01 | 只看該作者
P0口的上拉剩接了個(gè)寂寞!
回復(fù)

使用道具 舉報(bào)

6#
ID:149451 發(fā)表于 2022-5-14 18:29 | 只看該作者
P2是數(shù)據(jù)、命令口,proteus仿真圖錯(cuò)了!
回復(fù)

使用道具 舉報(bào)

7#
ID:161164 發(fā)表于 2022-5-16 11:31 | 只看該作者
部分版本的Proteus LCD1602不會(huì)傳回查忙
程序會(huì)在LcdWaitReady()中死循環(huán)
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日韩不卡一区二区 | 亚洲欧美少妇 | 黄色电影在线免费观看 | 亚洲一区二区三区免费视频 | 欧美一级做a爰片免费视频 国产美女特级嫩嫩嫩bbb片 | 日韩在线免费 | 国产精品永久免费 | 我爱操| 亚洲国产精品久久久久 | 亚洲天堂999 | 欧美成人一区二区三区 | 国产日韩一区二区 | 国产精品一区网站 | 久久久久久久久久久国产 | 日本精品视频 | 一级免费视频 | 午夜精品一区二区三区免费视频 | 在线视频a| www.成人免费视频 | 免费国产精品久久久久久 | 天天操夜夜爽 | 亚洲欧洲视频 | aa级毛片毛片免费观看久 | 久久精品av | 成人高清在线 | 国产在线观看不卡一区二区三区 | 天天夜夜操 | 精品国产黄a∨片高清在线 成人区精品一区二区婷婷 日本一区二区视频 | 久久av一区二区三区 | 欧美精品1区2区 | 一区二区三区欧美 | www.色综合 | 自拍偷拍在线视频 | 亚洲欧美视频在线观看 | www.天天操.com | www.成人.com | 黄色片在线| 成人毛片视频免费 | 亚洲小视频在线观看 | а_天堂中文最新版地址 | 久久成人精品 |