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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

我用STC8G1K08單片機HT1621芯片屏老點不亮

  [復制鏈接]
跳轉到指定樓層
樓主
ID:341833 發表于 2020-3-21 23:56 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
我用STC8G1K08,HT1621段碼屏驅動芯片屏老點不亮
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏5 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:341833 發表于 2020-3-21 23:57 | 只看該作者
#include "STC8G1K08.H"
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int

#define _Nop() _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_()
#define BIAS 0x52 //0b1000 0101 0010 1/3duty 4com

#define SYSDIS 0X00 //0b1000 0000 0000 關振系統蕩器和LCD偏壓發生器
#define SYSEN 0X02 //0b1000 0000 0010 打開系統振蕩器

#define LCDOFF 0X04 //0b1000 0000 0100 關LCD偏壓
#define LCDON 0X06 //0b1000 0000 0110 打開LCD偏壓
#define XTAL 0x28 //0b1000 0010 1000 外部接時鐘
#define RC256 0X30 //0b1000 0011 0000 內部時鐘
#define TONEON 0X12 //0b1000 0001 0010 打開聲音輸出
#define TONEOFF 0X10 //0b1000 0001 0000 關閉聲音輸出
#define WDTDIS 0X0A //0b1000 0000 1010 禁止看門狗

//HT1621控制位(液晶模塊接口定義,根據自已的需要更改)
sbit HT1621_DAT=P3^4; //HT1621數據引腳
sbit HT1621_CS=P3^6; //HT1621使能引腳
sbit HT1621_WR=P3^5; //HT1621時鐘引腳
sbit P1_5=P1^5;
uchar code
Ht1621Tab[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};

//delay us
void Delay(uchar us) //5,7,9
{
while(--us);
}


//delay ms
void DelayMS(uint iMs)
{
uint i,j;
for(i=0;i<iMs;i++)
for(j=0;j<65;j++) Delay(1);
}

/******************************************************
寫數據函數,cnt為傳送數據位數,數據傳送為低位在前
*******************************************************/
void Ht1621Wr_Data(uchar Data,uchar cnt)
{
uchar i;
for (i=0;i<cnt;i++)
      {
       HT1621_WR=0;
       _Nop();
       HT1621_DAT=Data&0x80;
       _Nop();
       HT1621_WR=1;
       _Nop();
      Data<<=1;
     }

}

/********************************************************
函數名稱:void Ht1621WrCmd(uchar Cmd)
功能描述: HT1621命令寫入函數
全局變量:無
參數說明:Cmd為寫入命令數據
返回說明:無

說 明:寫入命令標識位100
********************************************************/
void Ht1621WrCmd(uchar Cmd)
{
HT1621_CS=0;
_Nop();
Ht1621Wr_Data(0x80,4); //寫入命令標志100
Ht1621Wr_Data(Cmd,8); //寫入命令數據
HT1621_CS=1;
_Nop();
}
/********************************************************
函數名稱:void Ht1621WrOneData(uchar Addr,uchar Data)
功能描述: HT1621在指定地址寫入數據函數
全局變量:無
參數說明:Addr為寫入初始地址,Data為寫入數據
返回說明:無
說 明:因為HT1621的數據位4位,所以實際寫入數據為參數的后4位
********************************************************/
void Ht1621WrOneData(uchar Addr,uchar Data)
{
HT1621_CS=0;
Ht1621Wr_Data(0xa0,3); //寫入數據標志101
Ht1621Wr_Data(Addr<<2,6); //寫入地址數據
Ht1621Wr_Data(Data<<4,4); //寫入數據
HT1621_CS=1;
_Nop();
}
/********************************************************
HT1621測試程序,2008-2-13, 22:41:43
函數名稱:void Ht1621WrAllData(uchar Addr,uchar *p,uchar cnt)
功能描述: HT1621連續寫入方式函數
全局變量:無
參數說明:Addr為寫入初始地址,*p為連續寫入數據指針,
                  cnt為寫入數據總數
返回說明:無
說 明:HT1621的數據位4位,此處每次數據為8位,寫入數據
           總數按8位計算
********************************************************/
void Ht1621WrAllData(uchar Addr,uchar *p,uchar cnt)
{
uchar i;
HT1621_CS=0;
Ht1621Wr_Data(0xa0,3); //寫入數據標志101
Ht1621Wr_Data(Addr<<2,6); //寫入地址數據
for (i=0;i<cnt;i++)
      {
        Ht1621Wr_Data(*p,8); //寫入數據
        p++;
       }
HT1621_CS=1;
_Nop();
}
/********************************************************
函數名稱:void Ht1621_Init(void)
功能描述: HT1621初始化
全局變量:無
參數說明:無
返回說明:無
版 本:1.0
說 明:初始化后,液晶屏所有字段均顯示
********************************************************/
void Ht1621_Init(void)
{
HT1621_CS=1;
HT1621_WR=1;
HT1621_DAT=1;
DelayMS(2000); //延時使LCD工作電壓穩定
Ht1621WrCmd(BIAS);
Ht1621WrCmd(RC256); //使用內部振蕩器
Ht1621WrCmd(SYSDIS);
Ht1621WrCmd(WDTDIS);
Ht1621WrCmd(SYSEN);
Ht1621WrCmd(LCDON);
}

/**********************************/
void main()
{
uchar i,j,t;
Ht1621_Init(); //上電初始化LCD
DelayMS(1000); //延時一段時間
while(1)
{
//               Ht1621WrAllData(0,Ht1621Tab,16); //清除1621寄存器數據,暨清屏
               Ht1621WrAllData(0,Ht1621Tab,32); //清除1621寄存器數據,暨清屏
               for (i=0;i<32;i++)
                    {
                     t=0x01;
                     for (j=0;j<4;j++)
                          {
                           Ht1621WrOneData(i,t);
                           t<<=1;
                           t++;
                           P1_5=~P1_5;
                           DelayMS(5000);
                          }
                     }
}
  }
回復

使用道具 舉報

板凳
ID:341833 發表于 2020-3-22 00:00 | 只看該作者
SEG18-SEG31  COM0-COM3
回復

使用道具 舉報

地板
ID:721297 發表于 2020-4-2 21:30 | 只看該作者
我剛好正在研究這片子,也遇到點屏不亮的問題,后來仔細看官網手冊發現一句很重要的話:
注意: 1、除 P3.0 和 P3.1 外,其余所有 I/O 口上電后的狀態均為高阻輸入狀態,用戶在
使用 I/O 口時必須先設置 I/O 口模式
就是他了,main函數里加一句:
P1M0 = 0x00;
P1M1 = 0x00;
P*M0 = 0x00;
P*M1 = 0x00;
.......把相應的IO口都設為準雙向或推挽輸出即可。
我是從STC15移植過來的程序,當然,也用有過STC8A,STC8F系列,沒想到這STC8G系列有這種操作,也是折騰了一下午才明白,現在還卡在ADC模塊,也和STC15系列不一樣,頭大中。想找ADC的例子看到這里有感而發,也是我踩到的坑,希望能幫到你。
回復

使用道具 舉報

5#
ID:341833 發表于 2020-4-3 20:19 | 只看該作者
刀刀殺豬 發表于 2020-4-2 21:30
我剛好正在研究這片子,也遇到點屏不亮的問題,后來仔細看官網手冊發現一句很重要的話:
注意: 1、除 P3. ...

你移植過來的程序,用HT1621的屏點亮了么?我進行了IO口端口配置,用HT1621屏就是沒有點亮
回復

使用道具 舉報

6#
ID:213173 發表于 2020-4-3 21:28 | 只看該作者
finezwl 發表于 2020-3-21 23:57
#include "STC8G1K08.H"
#include
#define uchar unsigned char

你的程序好像有點問題,給你一個示例參考:
  1. #include <STC89C5xRC.H>
  2. //宏定義LCD的操作命令
  3. #define ComMode  0x52    //4COM,1/3bias                1000 0101 0010
  4. //#define ComMode  0x50  //4COM,1/2bias          1000 0101 0000
  5. #define RCosc    0x30    //內部RC振蕩器(上電默認)1000 0011 0000
  6. #define LCD_on   0x06    //打開LCD顯示 偏壓發生器1000 0000 0110
  7. #define LCD_off  0x04    //關閉LCD顯示(上電默認)
  8. #define Sys_en   0x02    //系統振蕩器開 1000 0000 0010
  9. #define Ctrl_cmd 0x80    //寫控制命令   1000
  10. #define Data_cmd 0xa0    //寫數據命令   1010
  11. // 端口聲明
  12. sbit DIPIN=P3^7;
  13. sbit CLKPIN=P3^6;
  14. sbit CSPIN=P3^5;  

  15. /**-------------------------------------------------------------------------
  16. Name: SendBit_1621(送數據程序)
  17. ---------------------------------------------------------------------------*/
  18. void SendBit_1621(unsigned char sdata,unsigned char cnt) //sdata 的高cnt 位寫入HT1621,高位在前
  19. {
  20.         unsigned char i;
  21.         for(i=0;i<cnt;i++)
  22.         {
  23.                 CLKPIN=0;         
  24.                 if(sdata&0x80)
  25.                         DIPIN=1;
  26.                 else DIPIN=0;
  27.                 CLKPIN=1;
  28.                 sdata<<=1;
  29.         }
  30. }
  31. /*-------------------------------------------------------------------------
  32. Name: SendCmd(送命令)
  33. 寫入標志碼"100"和9位comma命令,由于沒有使用到更改時鐘輸出等命令
  34. 為了編程方便直接將command 的最高位寫"0"
  35. ---------------------------------------------------------------------------*/
  36. void SendCmd_1621(unsigned char command)//寫命令
  37. {//3位標志碼 + 9位命令,共12位
  38.         CSPIN=0; //執行一個下降沿                                       
  39.         SendBit_1621(0x80,4);    //寫入標志碼"100"和9位comma命令的最高1位共4位
  40.         SendBit_1621(command,8); //寫入9位comma命令的后8位,組成1000 xxxx xxxx
  41.         CSPIN=1;//送數完成后置高電平
  42. }

  43. /**-------------------------------------------------------------------------
  44. Name: Write_1621(送命令和數據程序)
  45. 寫入標志碼"101"和6位addr地址碼和8位sdata顯示數據。
  46. ---------------------------------------------------------------------------*/
  47. void Write_1621(unsigned char addr,unsigned char sdata,unsigned char len)//寫數據
  48. {//3位標志碼 + 6位寫數據命令 + len(4/8)位數據,共13/17位
  49.         addr<<=2;//高6位有效
  50.         CSPIN=0; //執行一個下降沿
  51.         SendBit_1621(0xa0,3);                //寫入標志碼"101"    寫數據命令101
  52.         SendBit_1621(addr,6);                //寫入addr 的高6位   寫數據命令xxxx xx
  53.         SendBit_1621(sdata,len);        //寫入8/4位 sdata數據  len=8/4
  54.         CSPIN=1;//送數完成后置高電平
  55. }
  56. /**-------------------------------------------------------------------------
  57. Name: Init_1621(初始化1621)
  58. -------------------------------------------------------------------------*/
  59. void LCD_Init()                                                //初始化
  60. {//程序輸入100 0+8=9位命令
  61.         SendCmd_1621(Sys_en);//Sys_en 0x02 系統振蕩器開          100 0 0000 0010
  62.         SendCmd_1621(RCosc); //RCosc 0x30 內部RC振蕩器(上電默認) 100 0 0011 0000
  63.         SendCmd_1621(ComMode);//4COM,1/3bias                     100 0 0101 0020
  64.         SendCmd_1621(LCD_on);//LCD_on 0x06 打開LCD顯示 偏壓發生器100 0 0000 0110
  65. }
  66. /*-------------------------------------------------------------------------
  67. Name: lcdwd1(點亮1621全部Seg)
  68. -------------------------------------------------------------------------*/
  69. void lcdwd1(unsigned char num)
  70. {
  71.         unsigned char i;
  72.         unsigned char addr=0;//寄存器起始地址0x00
  73.         for(i=0;i<num;i++)//num有效地址數
  74.         {
  75.                 Write_1621(addr,0xff,8);//addr為地址,0xff為數據,8為8位數據
  76.                 addr+=2;//順延2個4位地址碼
  77.         }
  78. }
  79. void main()
  80. {
  81.         LCD_Init();
  82.         while(1)
  83.         {
  84.                 lcdwd1(16); //全部點亮
  85.         }
  86. }
復制代碼
回復

使用道具 舉報

7#
ID:721297 發表于 2020-4-4 00:34 | 只看該作者
finezwl 發表于 2020-4-3 20:19
你移植過來的程序,用HT1621的屏點亮了么?我進行了IO口端口配置,用HT1621屏就是沒有點亮

我不是用的HT1621的屏,是ST7567的12864屏移植到ST7032的1602屏上,現在配置一下IO口,都可以點亮。然后我的ADC還是不好用,接12864一切正常,接1602就不正常,都是一樣的函數,就屏的驅動不一樣,我就不明白了,明天再一段一段改,真蛋疼。
回復

使用道具 舉報

8#
ID:394367 發表于 2020-4-13 20:20 | 只看該作者
刀刀殺豬 發表于 2020-4-2 21:30
我剛好正在研究這片子,也遇到點屏不亮的問題,后來仔細看官網手冊發現一句很重要的話:
注意: 1、除 P3. ...

我也用了ADC,開始老是照搬STC15的ADC,不行。我老是想弄10位的ADC,不可以。后來,用8位的ADC可以了,但是采取的數值不是很準確,也算能用上了,畢竟我們采取的數值不要求精密。換DAC測試時,輸出的電壓老是偏低0.5V左右,沒辦法,不知道哪里問題,只好提高輸出的電壓來滿足要求。
/**ADC初始化**/
void ADC_init()
{
    P3M0=0x04;          //設置P3.2口高四位為ADC口
        P3M1=0x04;
        P_SW2=0x80;
        CKSEL=0x00;
        P_SW2=0x00;
        ADCCFG=0x0f;        //設置ADC時鐘為 系統時鐘/2/16
        ADC_CONTR|=0x80; //開啟AD轉換電源
        _nop_();
        _nop_();
        _nop_();

}
uint GetAD(uchar ch)
{
    uint ADC_Value=0;       
        ADC_RES=0;
        ADC_CONTR|=ch;          //取頻道號
        ADC_CONTR|=0x40;  //啟動AD轉換
        _nop_();
        _nop_();
        _nop_();
        while(!(ADC_CONTR & 0x20));

        ADC_CONTR &=~0x20;                  //清除完成標志       
        ADC_Value=ADC_RES;                  //讀ADC高8位
        return ADC_Value;
}
..............
..............
     
                  OPA=GetAD(2);                //取P3.2口電壓
                  OPA=OPA*5.15/256;
回復

使用道具 舉報

9#
ID:721297 發表于 2020-4-14 08:37 | 只看該作者
FJ2018 發表于 2020-4-13 20:20
我也用了ADC,開始老是照搬STC15的ADC,不行。我老是想弄10位的ADC,不可以。后來,用8位的ADC可以了,但 ...

謝謝,我差不多找到原因了,5V供電下ADC有問題,不呈線性走,比如100、101、102然后突然跳到100,又跳到104,因為之前的12864屏用的3.3V供電,現在1602必須要5V供電,也是最近才想到電源問題,現在換成3.3V后ADC呈線性走了,但是現在還有低壓時數據偏高,高壓時數據偏低的問題,仍需努力解決。源碼照搬STC15即可,STC15的ADC里有個P1ASF寄存器,我發現在STC8里沒有,去掉后試了試,發現STC15也好使。ADCCFG更加玄學,不設置采樣速度特別快(STC15里就沒設置),設置0x0F速度慢,精度尚可,設置0x2F速度特別慢,而且采樣的數據能飄到天上,比如100、101、104、108、113、然后又跌到106、107、110...,這東西真特么玄學。
回復

使用道具 舉報

10#
ID:394367 發表于 2020-4-14 10:38 | 只看該作者
刀刀殺豬 發表于 2020-4-14 08:37
謝謝,我差不多找到原因了,5V供電下ADC有問題,不呈線性走,比如100、101、102然后突然跳到100,又跳到1 ...

我也測試到10位和12位的ADC采集了,只能精確到百分位,千分位還是有點跳動.
回復

使用道具 舉報

11#
ID:80689 發表于 2020-4-15 20:50 | 只看該作者
STC8G1K08 自帶LED驅動  你還用HT1621做什么呢?
回復

使用道具 舉報

12#
ID:399111 發表于 2020-4-29 09:55 | 只看該作者
一樣的情況
回復

使用道具 舉報

13#
ID:770554 發表于 2020-6-10 14:53 | 只看該作者
finezwl 發表于 2020-3-21 23:57
#include "STC8G1K08.H"
#include
#define uchar unsigned char

#include "STC8G1K08.H"這個頭文件怎么寫的?
回復

使用道具 舉報

14#
ID:303307 發表于 2021-11-7 09:19 | 只看該作者
你好樓主,我也遇到同樣的問題,請問你這個問題解決了嗎,STC8G1K17和STC8H3K64也不行,就是點不亮,用STC8A8k就沒有問題,搞老好幾天了,如果解決了分享一下,謝謝!
回復

使用道具 舉報

15#
ID:624729 發表于 2023-4-18 13:56 | 只看該作者
wulin 發表于 2020-4-3 21:28
你的程序好像有點問題,給你一個示例參考:

多謝了,用你的代碼點亮屏幕里, 非常感謝.
回復

使用道具 舉報

16#
ID:1034262 發表于 2023-4-18 14:44 | 只看該作者
黑白LCD驅動都是簡單的驅動,不管是HT1621,還是1602、12864,只要時序正確,沒有驅動不了的,示波器看看信號、時序是否正常。
STC8系列的ADC的線性度非常高的,有抖動基本上是因為你的參考源或輸入信號有紋波。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 2018国产精品 | 精品粉嫩aⅴ一区二区三区四区 | 91色在线 | 手机看片169| 国产一区二区免费 | 蜜桃视频在线观看免费视频网站www | 国产九九九九 | 国产免费一区二区三区网站免费 | xxx视频 | 视频一区二区在线观看 | 国产精品久久久久久久白浊 | 美日韩免费视频 | 国产精品欧美一区二区三区 | 亚洲精品一区二区网址 | 国产精品69毛片高清亚洲 | 激情国产 | 国产第一区二区 | 久www| 有码一区 | 羞视频在线观看 | 99热在线播放 | 久久免费精品视频 | 免费观看黄色一级片 | 一级a性色生活片久久毛片 一级特黄a大片 | 成人字幕网zmw | 欧美一区二区三区国产 | 久久久女女女女999久久 | 欧美精品 在线观看 | 亚洲成人中文字幕 | www.日本三级 | 日韩在线中文字幕 | 成人免费一级 | 亚洲午夜精品久久久久久app | 亚洲欧美一区二区三区在线 | 99精品欧美一区二区三区 | 成人黄视频在线观看 | 日韩视频区 | 国产精品日本一区二区在线播放 | 精品国产一区二区三区av片 | 国产不卡视频 | 色av一区二区 |