牛卧堂MCU技术交流

标题: M41系列控制LCD驱动芯片TM1622/1621的显示情况 [打印本页]

作者: 匿名    时间: 2022-6-29 10:46
标题: M41系列控制LCD驱动芯片TM1622/1621的显示情况
用新唐M43的芯片控制的,这个是TM1622在写入程序后的显示情况。命令和数据都按说明书上的写入了,为何呈现的显示情况这么模糊、虚呢?有木有大佬懂啊?折腾很久了,实在解决不了了。。新人求指点,拜托啦



作者: admin    时间: 2022-6-29 14:03
麻烦您先贴下您的代码
作者: admin    时间: 2022-6-29 14:10
请问您具体使用的是那颗芯片 原贴文的描述不准确
作者: 匿名    时间: 2022-6-29 14:24
#define CS PB13
#define WR PB14
#define DATA PB15

#define SYS_DIS 0x0 //关闭系统振荡器和 LCD偏压发生器
#define SYS_EN 0x2 //打开系统振荡器
#define LCD_OFF 0x4 //关闭 LCD 显示
#define LCD_ON 0x6 //开启 LCD 显示
#define WDT_DIS 0x10 //禁止看门狗
#define SC 0x30         //110000
#define uchar unsigned char
//输出数据
uint32_t TM1622Tab[16]={0x1e0,0x1e0,0x11e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x0};
uint32_t TM1622Tab_input[10]={0x23,0x243,0x223,0x222,0x2333,0x552,0x23,0x32,0x232,0x523};

//时延函数,单位us
void delay_t(uint32_t i){
                int        u32Delay = 6;
                        TIMER0->CMP = 12*i;
                        TIMER0->CTL = TIMER_CTL_CNTEN_Msk | TIMER_ONESHOT_MODE|0 ;
                        while(TIMER0->CTL & TIMER_CTL_ACTSTS_Msk);
                                for(; u32Delay > 0UL; u32Delay--)
                                        {
                                        __NOP();
                                        }
                        while(TIMER0->CTL & TIMER_CTL_ACTSTS_Msk);
                       
}
//时延函数,单位50ns
void delay_ns(uint32_t time){

        int        u32Delay=time;
                    for(; u32Delay > 0UL; u32Delay--)
    {
        __NOP();
    }

        }  
//写数据
void TM1622Wr_Data(uint32_t Data,uint32_t cnt){
                for(int i=0;i<cnt;i++){
                DATA = (Data&0x100)>>8;
                delay_t(1);       
                WR = 0;               
                delay_t(4);       
                WR = 1;       
                delay_t(3);       
                Data <<=1;


                }

}
//输入具体控制命令函数
void TM1622WrCmd(uint32_t Cmd){
                CS = 0;       
                delay_t(5);
                TM1622Wr_Data(0x100,3);//输入命令类型100

                TM1622Wr_Data(Cmd,9); //输入具体控制命令
                CS = 1;

                delay_ns(6);

}
//连续写入函数,Addr为写入地址,p为写入数据首地址
void TM1622WrALLData(uint32_t Addr,uint32_t *p,uint32_t cnt){
                CS = 0;
                delay_t(3);

                TM1622Wr_Data(0x140,3);//输入命令类型101

                TM1622Wr_Data(Addr<<3,6);

                for(int i=0;i<cnt;i++){
                        TM1622Wr_Data(*p,4);

                        p++;

                }

                CS = 1;
               
                delay_ns(6);
}
void TM1622WrOneData(uint32_t Addr,uint32_t Data)
{
  CS=0;
  TM1622Wr_Data(0x140,3);                //写入数据标志101 ,10100000
  TM1622Wr_Data(Addr<<3,6);        //写入地址数据
  TM1622Wr_Data(Data<<1,4);        //写入数据
  CS=1;   
  delay_ns(6);  
}
void delay_ms(uint32_t t){
                int k=1,j;
                for(int i=0;i<t*10;i++) {
    for(int j=0;j<65;j++) {
                        k--;
                        k++;
                }       
                }
}
int main(void)
{       
       

       

    /* Init System, IP clock and multi-function I/O */
    SYS_Init();

    /* Init UART to 115200-8n1 for print message */
    UART_Open(UART0, 115200);
       
       
          GPIO_SetMode(PB, BIT13, GPIO_MODE_OUTPUT);//1,CS
    GPIO_SetMode(PB, BIT14, GPIO_MODE_OUTPUT);//2,WR
    GPIO_SetMode(PB, BIT15, GPIO_MODE_OUTPUT);//3,DATA
                GPIO_SetMode(PB, BIT5, GPIO_MODE_OUTPUT);//4 BLK,3.3v电压输入,高电平亮

                CS = 1;
                WR = 1;
                DATA = 1;
                PB5 = 1;


delay_ms(100);


               
                TM1622WrCmd(SC);

                TM1622WrCmd(SYS_EN);
                TM1622WrCmd(LCD_ON);

        //        TM1622WrCmd(0x80);//打开声音输出
                //TM1622WrCmd(0x4);//关闭LCD显示器
                TM1622WrCmd(0x146);//时基本输出频率:8Hz WDT 使能后输出延时:1/2 s
                                TM1622WrCmd(0xc);//使能时基输入
                                TM1622WrCmd(0x1e);//清除WDT状态
                                TM1622WrCmd(0xa);//WDT失效               
                                TM1622WrCmd(0x1a);//时基发生器清零
                                TM1622WrCmd(0x1c6);//正常模式
                                delay_ms(10);

  for(int i=0;i<=31;i++)
   {
         int t=0xff; //0xa0 10100000
          TM1622WrOneData(i,t);

   }

}
作者: 匿名    时间: 2022-6-29 14:26
admin 发表于 2022-6-29 14:03
麻烦您先贴下您的代码

代码已发
作者: 匿名    时间: 2022-6-29 14:27
admin 发表于 2022-6-29 14:10
请问您具体使用的是那颗芯片 原贴文的描述不准确

新唐的M453VG6AE芯片
作者: admin    时间: 2022-6-29 16:01
从图上看,屏不是由MCU驱动的。显示模糊可能是驱动电压不够。
作者: 董友萌    时间: 2022-9-24 15:48
可能是电压不对




欢迎光临 牛卧堂MCU技术交流 (http://nuvoton-mcu.com/) Powered by Discuz! X3.2