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

標題: stc8h8k64u內部12位ad加lcd1602做得電壓表為啥運行不了? [打印本頁]

作者: @GS    時間: 2024-3-5 13:07
標題: stc8h8k64u內部12位ad加lcd1602做得電壓表為啥運行不了?
#include <STC8h.H>
#include <stdio.h>
#include <intrins.h>

#define uchar unsigned char
#define uint unsigned int
//        uint Get_ADC12bitResult(uchar channel);

//void iO();
sbit RS = P2^4;   //定義端口
sbit RW = P2^5;
sbit EN = P2^6;

#define RS_CLR RS=0
#define RS_SET RS=1

#define RW_CLR RW=0
#define RW_SET RW=1

#define EN_CLR EN=0
#define EN_SET EN=1

#define DataPort P0

void delay(unsigned int ms)        //@11.0592MHz
{
        unsigned char data i, j;
   while(ms--)
         {
        i = 15;
        j = 90;
        do
        {
                while (--j);
        } while (--i);
}}

/*------------------------------------------------
              判忙函數
------------------------------------------------*/
bit LCD_Check_Busy(void)
{
DataPort= 0xFF;
RS_CLR;
RW_SET;
EN_CLR;
delay(1);
EN_SET;
         delay(1);
return (bit)(DataPort & 0x80);
}
/*------------------------------------------------
              寫入命令函數
------------------------------------------------*/
void LCD_Write_Com(unsigned char com)
{  
while(LCD_Check_Busy()); //忙則等待
RS_CLR;
RW_CLR;
EN_SET;
DataPort= com;
delay(1);
EN_CLR;
         delay(1);
}
/*------------------------------------------------
              寫入數據函數
------------------------------------------------*/
void LCD_Write_Data(unsigned char Data)
{
while(LCD_Check_Busy()); //忙則等待
RS_SET;
RW_CLR;
EN_SET;
DataPort= Data;
delay(1);
EN_CLR;
         delay(1);
}

/*------------------------------------------------
                清屏函數
------------------------------------------------*/
void LCD_Clear(void)
{
LCD_Write_Com(0x01);
delay(5);
}
/*------------------------------------------------
              寫入字符串函數
------------------------------------------------*/
void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)
{     
if (y == 0)
        {     
         LCD_Write_Com(0x80 + x);     //表示第一行
        }
else
        {      
        LCD_Write_Com(0xC0 + x);      //表示第二行
        }        
while ((*s)!='\0')
        {     
LCD_Write_Data( *s);     
s ++;     
        }
}
/*------------------------------------------------
              寫入字符函數
------------------------------------------------*/
void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data)
{     
if (y == 0)
        {     
        LCD_Write_Com(0x80 + x);     
        }   
else
        {     
        LCD_Write_Com(0xC0 + x);     
        }        
LCD_Write_Data( Data);  
}
/*------------------------------------------------
              初始化函數
------------------------------------------------*/
void LCD_Init(void)
{
   LCD_Write_Com(0x38);    /*顯示模式設置*/
   delay(5);
   LCD_Write_Com(0x38);
   delay(5);
   LCD_Write_Com(0x38);
   delay(5);  
   LCD_Write_Com(0x38);  
   LCD_Write_Com(0x08);    /*顯示關閉*/
   LCD_Write_Com(0x01);    /*顯示清屏*/
   LCD_Write_Com(0x06);    /*顯示光標移動設置*/
   delay(5);  
   LCD_Write_Com(0x0C);    /*顯示開及光標設置*/
   }



void adc_init() {
    ADCCFG =ADCCFG|0x20;  // 將P1.0設置為ADC功能
    ADC_RES = 0;
        ADC_RESL = 0;
    ADC_CONTR = 0x80;
}

unsigned int adc_read()
        {
    ADC_CONTR |= 0x40;
                delay(3);
    while ((ADC_CONTR&0x20)==0);
    ADC_CONTR &= ~0x20;
    return (ADC_RES << 8) + ADC_RESL;
}

void main() {
    unsigned int voltage;
        unsigned char i;
    char str[16];

    LCD_Init();
    adc_init();

    while (1) {
        voltage = adc_read();
        sprintf(str, "Voltage: %.2fV", voltage * 5.0 / 4096);

        LCD_Write_Com(0x80);  // 設置光標位置為第一行第一列
        for ( i = 0; i < 16; i++) {
            LCD_Write_Data(str[i]);
        }

        delay(1000);  // 延時1秒鐘
    }
}


有沒有大佬回答!這個顯示沒有報錯,但是運行不了,是哪個原因?




作者: cocolala    時間: 2024-3-5 14:06
    你好,你這里只給了程序,看不到原理圖和硬件不好分析,下面從典型的幾點給下參考:
    1、先分開測試,比如先點亮屏,屏需要硬件調節對比度的。不知道你的硬件,我把我手上有的艾克姆的STC8H8K64U的程序附件發上。


    2、如果屏可以顯示(注意參考時把IO口都注意到,修改到),然后可以測下ADC,程序見附件。注意ADC選擇的通道。例程用的P0.4口。

ADC.rar

42.32 KB, 下載次數: 11

LCD1602.rar

40.56 KB, 下載次數: 9


作者: aidianzi    時間: 2024-3-5 15:48
你說的運行不了是具體只什么,顯示也顯示不了還是能顯示ADC轉換不正常。程序中沒有看到你初始化IO模式,STC8H的IO看看手冊上面P3.0、P3.1是默認準雙向,其余IO是默認高阻模式,初始化驅動LCD的GPIO模式為準雙向或者推挽模式,不熟悉的情況下設置為準雙向
作者: wulin    時間: 2024-3-5 16:40
給你一個STC8H測量電壓,數碼管顯示并串口上傳數據的示例,只要把對應端口和數碼管改1602顯示就行。
STC8H測量電源電壓計算輸入電壓串口上傳數據.rar (22.1 KB, 下載次數: 26)


作者: Hephaestus    時間: 2024-3-5 17:40
是沒有顯示還是顯示的數值不對?
作者: @GS    時間: 2024-3-5 19:58
沒有顯示
作者: lingwise    時間: 2024-3-9 10:29
單片機的P0數據口得配置推挽輸出,
如果是自己做的板子注意需要把顯示屏的VL引腳接一個1K電阻到地,調高對比度




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 精品成人免费视频 | 日韩成人免费在线视频 | 热re99久久精品国产99热 | 久久久久久久国产精品 | 最新国产在线 | a在线视频 | 欧美 中文字幕 | 精品福利视频一区二区三区 | 久久中文字幕一区 | 欧美一级二级视频 | 欧美日韩国产一区二区三区 | 伊人最新网址 | 欧美乱大交xxxxx另类电影 | 毛片免费看 | 天天看天天爽 | 亚洲一区二区三区视频 | 欧美乱操 | 99久久精品视频免费 | 日韩影音 | 黄色中文字幕 | 91精品综合久久久久久五月天 | 国产高清视频在线播放 | 一区二区三区在线观看视频 | 亚洲综合久久精品 | 亚洲欧美成人影院 | 日本一区二区三区四区 | 天天久久 | 午夜色婷婷 | 国产精品成人品 | 少妇一级淫片免费放播放 | 在线视频一区二区 | 成人日韩| 中文字幕动漫成人 | 国产91在线播放 | 日韩免费网站 | 国产成人99久久亚洲综合精品 | 你懂的在线视频播放 | 99久久精品视频免费 | 中文字幕亚洲欧美日韩在线不卡 | 色播av| 免费毛片在线 |