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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5704|回復: 6
打印 上一主題 下一主題
收起左側

關于單片機+lcd1602在proteus仿真中亮了但無顯示問題

[復制鏈接]
跳轉到指定樓層
樓主
根據原理圖在proteus中仿真,但是代碼在實物上可以跑,仿真就沒有顯示了

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

#define LCD1602_DB P2//lcd相關端口
#define state_wait 0 //系統等待按鍵信號狀態
#define state_temp_choose 1//等待光電傳感器信號,選擇溫度狀態


/***lcd相關端口***/
sbit LCD1602_RS = P0^7;
sbit LCD1602_RW = P0^6;
sbit LCD1602_E = P0^5;


sbit key_start = P3^5;//啟動按鍵
sbit temp_up = P2^4;//繼電器開關
sbit temp_set = P3^4;//光電傳感器讀取

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

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

void main()
{
        InitLcd1602();//lcd初始化
        LcdShowStr(1, 0, "System ready");//lcd顯示系統準備完成
        /***定時器相關配置,定時50ms,方便計算***/
        TMOD = 0x01;//啟動定時器0
        TH0 = (65535-45872)/256;
        TL0 = (65535-45872)%256;
        EA = 1;
        ET0 = 1;
        
        while(state == state_wait)//檢測啟動按鍵
        {
                if(key_start == 0)
                {
                        state = state_temp_choose;
                        TR0 = 1;//啟動定時器
                }
        }
        LcdShowStr(1, 0, "             ");//lcd顯示系統啟動
        while(state == state_temp_choose)//檢測光電傳感器數據
        {
                if(temp_set == 0)
                {
                        set_temp = readtemp();
                        TR0 = 0;//停止計時
                }
        }
        set_temp = readtemp();
        my_char[7] = (int)(set_temp%1000/100) + '0';//提取溫度十位并轉換
        my_char[8] = (int)(set_temp%100/10) + '0';//提取溫度個位并轉換
        my_char[10] = (int)(set_temp%10) + '0';//顯示小數點后一位
        LcdShowStr(1, 1, my_char);//lcd顯示系統確定溫度成功
        while(1);
}
void T0_time() interrupt 1 //50ms中斷,每1秒(20次進入)刷新時間與溫度顯示
{
        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';//提取時間百位并轉換
                my_time[8] = (int)(now_time%100/10) + '0';//提取時間十位并轉換
                my_time[9] = (int)(now_time%10) + '0';//提取時間個位并轉換
                LcdShowStr(1, 0, my_time);//lcd顯示時間
                set_temp = readtemp();
                my_char[7] = (int)(set_temp/100) + '0';//提取溫度十位并轉換
                my_char[8] = (int)(set_temp%100/10) + '0';//提取溫度個位并轉換
                my_char[10] = (int)(set_temp%10) + '0';//顯示小數點后一位
                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寫數據
{
        LcdWaitReady();
        LCD1602_RS = 1;
        LCD1602_RW = 0;
        LCD1602_DB = dat;
        LCD1602_E = 1;
        LCD1602_E = 0;
}
void LcdSetCursor(unsigned char x, unsigned char y)//設定坐標
{
        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, 下載次數: 27)

原理圖

原理圖

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

proteus

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

使用道具 舉報

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

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

仿真.png
回復

使用道具 舉報

板凳
ID:96682 發表于 2022-5-14 07:08 | 只看該作者
只因 RP1 引腳①沒接  Vcc 相當于沒接上拉電阻,以AT 89C 的特點,LCD 是不會顯示任何信息的
回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成年人的视频免费观看 | 日韩成人一区 | 天天操狠狠操 | 久久午夜精品 | 午夜国产| a级在线观看 | 国产视频在线观看一区二区三区 | 欧美在线亚洲 | 久久免费香蕉视频 | 亚洲欧美在线一区 | 97精品国产 | 久久久91精品国产一区二区三区 | 国产精品一区二区三区久久久 | 亚洲视频一区二区三区 | 免费一级片 | 91中文字幕在线观看 | 中文字幕av一区 | 午夜视频免费在线 | 久久久99国产精品免费 | 精品久久久久久久久久久下田 | 乱码av午夜噜噜噜噜动漫 | 日韩福利在线观看 | 亚洲欧美一区二区三区国产精品 | 男女羞羞视频免费看 | 国产精品1区2区 | 北条麻妃一区二区三区在线视频 | 免费在线视频精品 | 黄色精品视频网站 | 国产1区 | 天天色天天射天天干 | 国产日韩久久 | 高清av在线| 国产人成精品一区二区三 | 色在线视频网站 | 国产wwwcom| 国产精品区一区二 | 精品欧美黑人一区二区三区 | 成人三级网址 | 日韩国产精品一区二区三区 | 国产极品车模吞精高潮呻吟 | 男人天堂视频在线观看 |