搜索
bottom↓
回复: 8

STM8L152K4段式LCD 9个seg 1/4DUTY 1/3BIAS没法显示

[复制链接]

出0入0汤圆

发表于 2014-1-26 09:31:36 | 显示全部楼层 |阅读模式
搞了好几天了STM8L152K4驱动段式LCD ,9个seg, 1/4DUTY ,1/3BIAS没法显示,测4个COM口有波形,程序如下请大侠多多帮忙

void LCD_Config(void)
{CLK_PeripheralClockConfig(CLK_Peripheral_LCD, ENABLE);
CLK_RTCClockConfig(CLK_RTCCLKSource_LSE, CLK_RTCCLKDiv_1);
LCD_Init(LCD_Prescaler_2, LCD_Divider_18, LCD_Duty_1_4,
                                        LCD_Bias_1_3, LCD_VoltageSource_External);//LCD_VoltageSource_Internal);
//选择seg8-seg15作为LCD段码输入端(stm8l152K6 32pin 无SEG0-SEG7)
//特别注意:STM8L152K6只有4个COM,且固定在PA4\5\6和PD1端口
LCD_PortMaskConfig(LCD_PortMaskRegister_0, 0x00);
LCD_PortMaskConfig(LCD_PortMaskRegister_1, 0xFF);
LCD_PortMaskConfig(LCD_PortMaskRegister_2, 0x00);
LCD_PortMaskConfig(LCD_PortMaskRegister_3, 0x00);
LCD_PortMaskConfig(LCD_PortMaskRegister_4, 0x00);
LCD_PortMaskConfig(LCD_PortMaskRegister_5, 0x00);

LCD_ContrastConfig(LCD_Contrast_Level_7);
LCD_DeadTimeConfig(LCD_DeadTime_0);
LCD_PulseOnDurationConfig(LCD_PulseOnDuration_1);
LCD_Cmd(ENABLE);
  
}

/******************************************************************************
功能说明: 16进制转成ASCII
输入参数: i代转数值 str转成后的数值
输出参数:
调用说明:
******************************************************************************/
void Byte2ASCII(u8 i,u8 *str)
{str[0] = i / 100;//'0' + i / 100;
if(str[0] == '0')
        {str[0] = 32;//' ';
        }
str[1] = (i / 10) % 10;//'0' + (i / 10) % 10;
if(str[0] == ' ' && str[1] == '0')
        {str[1] = 32;//' ';
        }
str[2] = i % 10;//'0' + i % 10;
str[3] = 32;//' ';
}

void LCD_SetSegValue(void)  
{u16 T,SEG[4];  
u8 i,j,Code[6];  
for(i=0;i<6;i++)
        {Code[5-i]=Disp_Bit[Disp_Buf[i]&0x7F];  
    if(Disp_Buf[i]&0x80)Code[5-i]|=0x02;  
   }  
for(i=0;i<4;i++)
        {for(T=0,j=0;j<6;j++)
           {T<<=2;  
       T|=(Code[j]&0x03);  
       Code[j]>>=2;  
      }   
    SEG[i]=T;  
   }  
LCD_RAM0=(u8)(SEG[0]);                                     //COM0->B[7:0]  
LCD_RAM1=(u8)(SEG[0]>>8);                                  //COM0->B[11:8]  
LCD_RAM3=(u8)(SEG[1]<<4);                                  //COM1->B[3:0]->H  
LCD_RAM4=(u8)(SEG[1]>>4);                                  //COM1->B[11:4]  
LCD_RAM7=(u8)(SEG[2]);                                     //COM2->B[7:0]  
LCD_RAM8=(u8)(SEG[2]>>8);                                  //COM2->B[11:8]  
LCD_RAM10=(u8)(SEG[3]<<4);                                 //COM3->B[3:0]->H  
LCD_RAM11=(u8)(SEG[3]>>4);                                 //CoM3->B[11:4]  
}

//清显示  
void LCD_Clear(u8 Index)  
{u8 i;  
if(Index==0xFF)
   for(i=0;i<6;i++)
            Disp_Buf[i]='U'-'A';  
else
    Disp_Buf[Index]='U'-'A';  
LCD_SetSegValue();  
}  
  
//写显示缓冲区点  
void LCD_ShowSpecial(u8 Saddr,u8 Char)  
{if(Char>0)
   Disp_Buf[Saddr]|=0x80;  
else      
   Disp_Buf[Saddr]&=0x7F;  
}  
  
//显示字符  
void LCD_ShowChar(u8 Saddr,u8 Char)  
{Disp_Buf[Saddr]&=0x80;  
Disp_Buf[Saddr]|=Char;  
LCD_SetSegValue();  
}  
  
//显示字符串  
void LCD_ShowString(u8 Saddr,u8 *Text)  
{u8 T,P,*Str;  
Str=(u8 *)Text;  
while(*Str>0)
        {T=*Str++;  
         P=Disp_Buf[Saddr];  
         Disp_Buf[Saddr++]=(P&0x80)|(T-'A');  
        }  
LCD_SetSegValue();  
}  
  
//显示数字  
void LCD_ShowNumber(u8 Saddr,u16 Number,u8 Length)  
{u8 P;  
Saddr+=Length-1;  
while(Length--)
   {P=Disp_Buf[Saddr];  
         Disp_Buf[Saddr]=(P&0x80)|(Number%10);  
         Saddr--;Number/=10;           
        }  
LCD_SetSegValue();  
}

void main(void)
{u16 i;
LCD_Config();
while(1)
   {LCD_ShowNumber(1,123456,4);
          for(i=0;i<0xFFFE;i++)
                {};
         }
}

出0入0汤圆

 楼主| 发表于 2014-1-26 11:20:57 | 显示全部楼层
没人知道,自己顶下

出0入0汤圆

 楼主| 发表于 2014-1-26 14:59:02 | 显示全部楼层
用示波器看发现COM-SEG偏压偏低1V多不到,单怎么设多没法加大偏压
LCD_ContrastConfig(LCD_Contrast_Level_7);是调整偏压的???

出0入0汤圆

发表于 2014-3-4 11:32:20 | 显示全部楼层
LCD_Init(LCD_Prescaler_2, LCD_Divider_18, LCD_Duty_1_4,
                                         LCD_Bias_1_3, LCD_VoltageSource_External);//LCD_VoltageSource_Internal);

电压选择Internal   LCD_VoltageSource_Internal

出0入0汤圆

 楼主| 发表于 2014-3-4 12:12:45 | 显示全部楼层
问题解决,芯片有问题

出0入0汤圆

发表于 2014-3-12 15:34:50 | 显示全部楼层
准备开搞STM8L系列,应该和STM8S差不多吧

出0入0汤圆

 楼主| 发表于 2014-3-12 16:35:21 | 显示全部楼层
有所区别,你看下8S应该是没LCD控制的

出0入0汤圆

发表于 2015-9-17 20:28:33 | 显示全部楼层
xad74 发表于 2014-3-4 12:12
问题解决,芯片有问题

STM8L152K4的LCD驱动功能有问题吗??

出0入0汤圆

发表于 2016-1-11 23:42:28 | 显示全部楼层
楼主能推荐几个段式的LCD不
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-9 03:50

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表