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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

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

[復制鏈接]
回帖獎勵 100 黑幣 回復本帖可獲得 20 黑幣獎勵! 每人限 1 次
跳轉到指定樓層
樓主
ID:1108299 發表于 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);
}}

/*------------------------------------------------
              判忙函數
------------------------------------------------*/
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秒鐘
    }
}


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



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

使用道具 舉報

沙發
ID:226055 發表于 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

回復

使用道具 舉報

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

使用道具 舉報

地板
ID:213173 發表于 2024-3-5 16:40 | 只看該作者
給你一個STC8H測量電壓,數碼管顯示并串口上傳數據的示例,只要把對應端口和數碼管改1602顯示就行。
STC8H測量電源電壓計算輸入電壓串口上傳數據.rar (22.1 KB, 下載次數: 26)

回復

使用道具 舉報

5#
ID:883242 發表于 2024-3-5 17:40 | 只看該作者
是沒有顯示還是顯示的數值不對?
回復

使用道具 舉報

6#
ID:1108299 發表于 2024-3-5 19:58 | 只看該作者
沒有顯示
回復

使用道具 舉報

7#
ID:62223 發表于 2024-3-9 10:29 | 只看該作者
單片機的P0數據口得配置推挽輸出,
如果是自己做的板子注意需要把顯示屏的VL引腳接一個1K電阻到地,調高對比度
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美成人一区二免费视频软件 | 成人精品视频在线观看 | 国产95在线 | 日韩在线一区二区三区 | 中文字幕一区二区三区四区 | 精品九九久久 | 国产在线二区 | 欧美一区二区在线观看 | 欧美不卡一区二区三区 | 国产精品精品视频一区二区三区 | 美女在线观看av | 欧美精品一区二区在线观看 | 免费午夜视频 | 日本视频在线播放 | aa级毛片毛片免费观看久 | 免费在线观看一区二区三区 | 天堂在线免费视频 | 成人一区二区三区 | 国产东北一级毛片 | 久久精品一区二区三区四区 | 久久国产精99精产国高潮 | 皇色视频在线 | 欧美日韩中文字幕在线 | 精品久久影院 | 先锋资源吧 | 一区二区三区欧美 | av片免费 | 亚洲国产成人av好男人在线观看 | 亚洲国产欧美一区 | 午夜影院在线观看免费 | 亚洲色综合 | 一级无毛片| 久久精品一区二区三区四区 | 成人免费网站www网站高清 | 免费看黄色国产 | 色婷婷久久久久swag精品 | 亚洲国产视频一区 | 羞视频在线观看 | 亚洲成人国产精品 | 中文字幕亚洲欧美日韩在线不卡 | 99re视频在线观看 |