打印
[STM8]

求解 stm8l152 为什么液晶不显示啊!!!

[复制链接]
1758|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
vergoo|  楼主 | 2015-2-10 11:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这是我写的程序,大侠帮忙看一下啊!!! 不胜感激!!!

#include<stm8l152c6.h>
#define uint unsigned int
#define uchar unsigned char
uint mask[4] = {0xF000, 0x0F00, 0x00F0, 0x000F};
uchar shift[4] = {12 , 8, 4 , 0};
uchar LCD_DisBuffer[4];
                                                                                  /* 0     1        2       3      4   */
uint NumberMap[10] = {0x3131, 0x2021, 0x3213, 0x3223, 0x2321,
                                                                                 /*  5      6       7       8      9   */
                                                                                  0x1323, 0x1333, 0x3021, 0x3333, 0x3323};
void LCD_Init(void);
void Clock_Init(void);
void ConvertNum(uchar InputNum);
void LCD_WriteFHR(uchar Num);
main()
{
                Clock_Init();
                LCD_Init();
               
               
                while (1)
                {LCD_WriteFHR(0);}
}
void Clock_Init(void)
{
               
                CLK_SCSR=0x01;//选择HSI作为系统时钟源
                CLK_ICKCR  = 0x11; // 启用内部RC=16MHZ HSI
                while((CLK_ICKCR & 0x02)==0); //等待时钟稳定
               
                CLK_CRTCR |=0x02;//选择HSI作为RTC时钟源
                CLK_CRTCR |=0xc0;//64分频  16MHZ/64=250KHZ  RTC/2用于LCD时钟 Flcd=125khz (16~500)

                CLK_PCKENR2 |=0X0c;//使能LCD RTC时钟
}
void LCD_Init()
{
                LCD_CR1 |=0X06;// 1/4 duty , 1/3 bias
                LCD_CR2 |=0xEF;//外部电源 3.3v
                LCD_FRQ=5<<4;//PS=5 div=0  fck_div= flcd/(2^ps x(16+div))125KHZ/(32X16)=244HZ Fframe=fck_div*duty=244/4=61HZ
                LCD_CR1 |=0X28;// 闪烁频率  fB=flcd/128=;
                LCD_PM0=0X7f;
                LCD_CR3=0X40;//使能
}
void ConvertNum(uchar InputNum)
{
                uint Num, tmp = 0;
                uchar i;
                Num=NumberMap[InputNum];
                for(i = 0;i < 4; i++)
                {
                                tmp = Num & mask[i]; //拆分 例如 0 0x3133  被拆分成 3 1 3 3 放到缓存数组中
                                LCD_DisBuffer[i] = (uchar)(tmp >> (uchar)shift[i]);       
                }
}
void LCD_WriteFHR(uchar Num)
{
                ConvertNum(Num);
      //COM0
      LCD_RAM1 |= (uchar)(LCD_DisBuffer[0]<<3);
      //COM1
      LCD_RAM4 |= (uchar)(LCD_DisBuffer[1] << 7);
      //COM2
      LCD_RAM7 |= (uchar)(LCD_DisBuffer[2]<<3 );
      //COM3
      LCD_RAM11 |= (uchar)(LCD_DisBuffer[3] << 7);
}
沙发
vergoo|  楼主 | 2015-2-10 11:23 | 只看该作者
快来人啊

使用特权

评论回复
板凳
mmuuss586| | 2015-2-10 12:20 | 只看该作者

用示波器看看时序是否正确;

使用特权

评论回复
地板
vergoo|  楼主 | 2015-2-10 12:42 | 只看该作者
没有示波器a

使用特权

评论回复
5
spiriter3| | 2015-2-10 17:11 | 只看该作者
哈哈,你太搞笑了,我晚上回去帮你看看吧
我回去烧录下,看看你信号怎么呢

使用特权

评论回复
6
spiriter3| | 2015-2-10 22:55 | 只看该作者
我用IAR编译不通,没找到你的stm8l152c6.h函数了

使用特权

评论回复
7
hhoodd| | 2015-3-15 16:41 | 只看该作者
com1的数据后四位,前四位分别放在LCD_RAM3,LCD_RAM4中
COM3的数据分别放在LCD_RAM10,LCD_RAM11中

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

33

帖子

1

粉丝