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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 5843|回復(fù): 15
打印 上一主題 下一主題
收起左側(cè)

我用STC8G1K08單片機(jī)HT1621芯片屏老點(diǎn)不亮

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:341833 發(fā)表于 2020-3-21 23:56 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
我用STC8G1K08,HT1621段碼屏驅(qū)動(dòng)芯片屏老點(diǎn)不亮
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏5 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:341833 發(fā)表于 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 關(guān)振系統(tǒng)蕩器和LCD偏壓發(fā)生器
#define SYSEN 0X02 //0b1000 0000 0010 打開系統(tǒng)振蕩器

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

//HT1621控制位(液晶模塊接口定義,根據(jù)自已的需要更改)
sbit HT1621_DAT=P3^4; //HT1621數(shù)據(jù)引腳
sbit HT1621_CS=P3^6; //HT1621使能引腳
sbit HT1621_WR=P3^5; //HT1621時(shí)鐘引腳
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);
}

/******************************************************
寫數(shù)據(jù)函數(shù),cnt為傳送數(shù)據(jù)位數(shù),數(shù)據(jù)傳送為低位在前
*******************************************************/
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;
     }

}

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

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

/**********************************/
void main()
{
uchar i,j,t;
Ht1621_Init(); //上電初始化LCD
DelayMS(1000); //延時(shí)一段時(shí)間
while(1)
{
//               Ht1621WrAllData(0,Ht1621Tab,16); //清除1621寄存器數(shù)據(jù),暨清屏
               Ht1621WrAllData(0,Ht1621Tab,32); //清除1621寄存器數(shù)據(jù),暨清屏
               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);
                          }
                     }
}
  }
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

你移植過來的程序,用HT1621的屏點(diǎn)亮了么?我進(jìn)行了IO口端口配置,用HT1621屏就是沒有點(diǎn)亮
回復(fù)

使用道具 舉報(bào)

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

你的程序好像有點(diǎn)問題,給你一個(gè)示例參考:
  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    //內(nèi)部RC振蕩器(上電默認(rèn))1000 0011 0000
  6. #define LCD_on   0x06    //打開LCD顯示 偏壓發(fā)生器1000 0000 0110
  7. #define LCD_off  0x04    //關(guān)閉LCD顯示(上電默認(rèn))
  8. #define Sys_en   0x02    //系統(tǒng)振蕩器開 1000 0000 0010
  9. #define Ctrl_cmd 0x80    //寫控制命令   1000
  10. #define Data_cmd 0xa0    //寫數(shù)據(jù)命令   1010
  11. // 端口聲明
  12. sbit DIPIN=P3^7;
  13. sbit CLKPIN=P3^6;
  14. sbit CSPIN=P3^5;  

  15. /**-------------------------------------------------------------------------
  16. Name: SendBit_1621(送數(shù)據(jù)程序)
  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. 寫入標(biāo)志碼"100"和9位comma命令,由于沒有使用到更改時(shí)鐘輸出等命令
  34. 為了編程方便直接將command 的最高位寫"0"
  35. ---------------------------------------------------------------------------*/
  36. void SendCmd_1621(unsigned char command)//寫命令
  37. {//3位標(biāo)志碼 + 9位命令,共12位
  38.         CSPIN=0; //執(zhí)行一個(gè)下降沿                                       
  39.         SendBit_1621(0x80,4);    //寫入標(biāo)志碼"100"和9位comma命令的最高1位共4位
  40.         SendBit_1621(command,8); //寫入9位comma命令的后8位,組成1000 xxxx xxxx
  41.         CSPIN=1;//送數(shù)完成后置高電平
  42. }

  43. /**-------------------------------------------------------------------------
  44. Name: Write_1621(送命令和數(shù)據(jù)程序)
  45. 寫入標(biāo)志碼"101"和6位addr地址碼和8位sdata顯示數(shù)據(jù)。
  46. ---------------------------------------------------------------------------*/
  47. void Write_1621(unsigned char addr,unsigned char sdata,unsigned char len)//寫數(shù)據(jù)
  48. {//3位標(biāo)志碼 + 6位寫數(shù)據(jù)命令 + len(4/8)位數(shù)據(jù),共13/17位
  49.         addr<<=2;//高6位有效
  50.         CSPIN=0; //執(zhí)行一個(gè)下降沿
  51.         SendBit_1621(0xa0,3);                //寫入標(biāo)志碼"101"    寫數(shù)據(jù)命令101
  52.         SendBit_1621(addr,6);                //寫入addr 的高6位   寫數(shù)據(jù)命令xxxx xx
  53.         SendBit_1621(sdata,len);        //寫入8/4位 sdata數(shù)據(jù)  len=8/4
  54.         CSPIN=1;//送數(shù)完成后置高電平
  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 系統(tǒng)振蕩器開          100 0 0000 0010
  62.         SendCmd_1621(RCosc); //RCosc 0x30 內(nèi)部RC振蕩器(上電默認(rèn)) 100 0 0011 0000
  63.         SendCmd_1621(ComMode);//4COM,1/3bias                     100 0 0101 0020
  64.         SendCmd_1621(LCD_on);//LCD_on 0x06 打開LCD顯示 偏壓發(fā)生器100 0 0000 0110
  65. }
  66. /*-------------------------------------------------------------------------
  67. Name: lcdwd1(點(diǎn)亮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有效地址數(shù)
  74.         {
  75.                 Write_1621(addr,0xff,8);//addr為地址,0xff為數(shù)據(jù),8為8位數(shù)據(jù)
  76.                 addr+=2;//順延2個(gè)4位地址碼
  77.         }
  78. }
  79. void main()
  80. {
  81.         LCD_Init();
  82.         while(1)
  83.         {
  84.                 lcdwd1(16); //全部點(diǎn)亮
  85.         }
  86. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

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

我不是用的HT1621的屏,是ST7567的12864屏移植到ST7032的1602屏上,現(xiàn)在配置一下IO口,都可以點(diǎn)亮。然后我的ADC還是不好用,接12864一切正常,接1602就不正常,都是一樣的函數(shù),就屏的驅(qū)動(dòng)不一樣,我就不明白了,明天再一段一段改,真蛋疼。
回復(fù)

使用道具 舉報(bào)

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

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

}
uint GetAD(uchar ch)
{
    uint ADC_Value=0;       
        ADC_RES=0;
        ADC_CONTR|=ch;          //取頻道號(hào)
        ADC_CONTR|=0x40;  //啟動(dòng)AD轉(zhuǎn)換
        _nop_();
        _nop_();
        _nop_();
        while(!(ADC_CONTR & 0x20));

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

使用道具 舉報(bào)

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

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

使用道具 舉報(bào)

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

我也測(cè)試到10位和12位的ADC采集了,只能精確到百分位,千分位還是有點(diǎn)跳動(dòng).
回復(fù)

使用道具 舉報(bào)

11#
ID:80689 發(fā)表于 2020-4-15 20:50 | 只看該作者
STC8G1K08 自帶LED驅(qū)動(dòng)  你還用HT1621做什么呢?
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

#include "STC8G1K08.H"這個(gè)頭文件怎么寫的?
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

多謝了,用你的代碼點(diǎn)亮屏幕里, 非常感謝.
回復(fù)

使用道具 舉報(bào)

16#
ID:1034262 發(fā)表于 2023-4-18 14:44 | 只看該作者
黑白LCD驅(qū)動(dòng)都是簡(jiǎn)單的驅(qū)動(dòng),不管是HT1621,還是1602、12864,只要時(shí)序正確,沒有驅(qū)動(dòng)不了的,示波器看看信號(hào)、時(shí)序是否正常。
STC8系列的ADC的線性度非常高的,有抖動(dòng)基本上是因?yàn)槟愕膮⒖荚椿蜉斎胄盘?hào)有紋波。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 91激情电影| 亚洲男女视频在线观看 | 国产有码 | 91免费观看国产 | 夜夜爽99久久国产综合精品女不卡 | 亚洲最大的黄色网址 | 91久久爽久久爽爽久久片 | 国产精品污www一区二区三区 | 国产人久久人人人人爽 | 蜜臀久久 | 日本网站免费观看 | 国产精品久久久久久久久免费 | 毛片免费观看 | 欧洲一区在线观看 | 在线观看国产精品一区二区 | 欧美一区二区 | 岛国二区 | 免费观看a级毛片在线播放 黄网站免费入口 | 永久看片| 国产三区av | 久久久久久亚洲 | 九色porny自拍视频 | 亚洲一二三区在线观看 | 久久成人av电影 | 国产精品3区 | 亚洲精品成人在线 | 欧美成人精品一区二区三区 | 国产精品视频网址 | 国产成人一区二区三区精 | 91久久精品一区二区二区 | 一区二区三区免费网站 | 中文字幕视频三区 | 亚洲成人中文字幕 | 国产精品一区二区日韩 | 亚洲综合色视频在线观看 | 日本公妇乱淫xxxⅹ 国产在线不卡 | 人人艹人人爽 | 亚洲成色777777在线观看影院 | 啪一啪在线视频 | 91日韩| 国产精品欧美一区二区 |