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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1458|回復: 6
收起左側(cè)

stc8h8k64u內(nèi)部12位ad加lcd1602做得電壓表為啥運行不了?

[復制鏈接]
回帖獎勵 100 黑幣 回復本帖可獲得 20 黑幣獎勵! 每人限 1 次
ID:1108299 發(fā)表于 2024-3-5 13:07 | 顯示全部樓層 |閱讀模式
#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);
}}

/*------------------------------------------------
              判忙函數(shù)
------------------------------------------------*/
bit LCD_Check_Busy(void)
{
DataPort= 0xFF;
RS_CLR;
RW_SET;
EN_CLR;
delay(1);
EN_SET;
         delay(1);
return (bit)(DataPort & 0x80);
}
/*------------------------------------------------
              寫入命令函數(shù)
------------------------------------------------*/
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);
}
/*------------------------------------------------
              寫入數(shù)據(jù)函數(shù)
------------------------------------------------*/
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);
}

/*------------------------------------------------
                清屏函數(shù)
------------------------------------------------*/
void LCD_Clear(void)
{
LCD_Write_Com(0x01);
delay(5);
}
/*------------------------------------------------
              寫入字符串函數(shù)
------------------------------------------------*/
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 ++;     
        }
}
/*------------------------------------------------
              寫入字符函數(shù)
------------------------------------------------*/
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);  
}
/*------------------------------------------------
              初始化函數(shù)
------------------------------------------------*/
void LCD_Init(void)
{
   LCD_Write_Com(0x38);    /*顯示模式設(shè)置*/
   delay(5);
   LCD_Write_Com(0x38);
   delay(5);
   LCD_Write_Com(0x38);
   delay(5);  
   LCD_Write_Com(0x38);  
   LCD_Write_Com(0x08);    /*顯示關(guān)閉*/
   LCD_Write_Com(0x01);    /*顯示清屏*/
   LCD_Write_Com(0x06);    /*顯示光標移動設(shè)置*/
   delay(5);  
   LCD_Write_Com(0x0C);    /*顯示開及光標設(shè)置*/
   }



void adc_init() {
    ADCCFG =ADCCFG|0x20;  // 將P1.0設(shè)置為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);  // 設(shè)置光標位置為第一行第一列
        for ( i = 0; i < 16; i++) {
            LCD_Write_Data(str[i]);
        }

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


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



回復

使用道具 舉報

ID:226055 發(fā)表于 2024-3-5 14:06 | 顯示全部樓層
    你好,你這里只給了程序,看不到原理圖和硬件不好分析,下面從典型的幾點給下參考:
    1、先分開測試,比如先點亮屏,屏需要硬件調(diào)節(jié)對比度的。不知道你的硬件,我把我手上有的艾克姆的STC8H8K64U的程序附件發(fā)上。
連接圖.jpg

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

ADC.rar

42.32 KB, 下載次數(shù): 11

LCD1602.rar

40.56 KB, 下載次數(shù): 9

回復

使用道具 舉報

ID:41656 發(fā)表于 2024-3-5 15:48 | 顯示全部樓層
你說的運行不了是具體只什么,顯示也顯示不了還是能顯示ADC轉(zhuǎn)換不正常。程序中沒有看到你初始化IO模式,STC8H的IO看看手冊上面P3.0、P3.1是默認準雙向,其余IO是默認高阻模式,初始化驅(qū)動LCD的GPIO模式為準雙向或者推挽模式,不熟悉的情況下設(shè)置為準雙向
回復

使用道具 舉報

ID:213173 發(fā)表于 2024-3-5 16:40 | 顯示全部樓層
給你一個STC8H測量電壓,數(shù)碼管顯示并串口上傳數(shù)據(jù)的示例,只要把對應(yīng)端口和數(shù)碼管改1602顯示就行。
STC8H測量電源電壓計算輸入電壓串口上傳數(shù)據(jù).rar (22.1 KB, 下載次數(shù): 26)
回復

使用道具 舉報

ID:883242 發(fā)表于 2024-3-5 17:40 | 顯示全部樓層
是沒有顯示還是顯示的數(shù)值不對?
回復

使用道具 舉報

ID:1108299 發(fā)表于 2024-3-5 19:58 | 顯示全部樓層
沒有顯示
回復

使用道具 舉報

ID:62223 發(fā)表于 2024-3-9 10:29 | 顯示全部樓層
單片機的P0數(shù)據(jù)口得配置推挽輸出,
如果是自己做的板子注意需要把顯示屏的VL引腳接一個1K電阻到地,調(diào)高對比度
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一区二区视频在线观看 | 国产精品亚洲二区 | 久久久久国产精品人 | 久久精品亚洲一区二区三区浴池 | 亚洲精品一区国语对白 | 免费在线a视频 | 欧美在线视频网站 | 麻豆精品一区二区三区在线观看 | 久久av网站 | 亚洲一区二区三区在线 | 精精国产xxxx视频在线 | 日韩三级电影在线看 | 涩涩视频网 | japanhd成人| 综合天天久久 | 国产亚洲精品a | 激情一区二区三区 | 久草网免费 | 久久久久国产一区二区三区 | 日日草天天干 | 伦理午夜电影免费观看 | 成人免费视频在线观看 | 成人不卡| 亚洲黄色一区二区三区 | 天天干天天插天天 | 9色网站 | 综合激情久久 | 亚洲视频免费播放 | 欧美一级免费看 | 成人午夜在线观看 | 日韩欧美精品一区 | 国产伊人精品 | 国产一区二区小视频 | 亚洲男人天堂2024 | 国产欧美精品一区二区三区 | 欧美另类视频 | 亚洲国产成人精 | 午夜欧美a级理论片915影院 | 免费观看一级特黄欧美大片 | 免费的av| 毛片一区 |