发表于 2015-2-2 14:14:24

分享一下STM8L152的段式液晶驱动程序

#include "stm8l15x.h"
void display_LCD(unsigned int temp);
void delay(unsigned int time);



void main(void)
{
    unsigned inttemp;
    temp=0;
    CLK_PeripheralClockConfig(CLK_Peripheral_RTC, ENABLE);   //使能实时时钟   
    CLK_PeripheralClockConfig(CLK_Peripheral_LCD, ENABLE);   //使能LCD时钟   
    CLK_RTCClockConfig(CLK_RTCCLKSource_HSI,CLK_RTCCLKDiv_8);   //选择RTC时钟源
    LCD_Init(LCD_Prescaler_64,LCD_Divider_16,LCD_Duty_1_4,LCD_Bias_1_3,LCD_VoltageSource_External );    //LCD初始化   
    delay(10);

    LCD_PortMaskConfig(LCD_PortMaskRegister_1,0XFE);// seg 9,10,11,12,13,14,15为seg口   
    LCD_PortMaskConfig(LCD_PortMaskRegister_2,0X3F);// seg 16,17,18,19,20,21,为seg口

    LCD_ContrastConfig(LCD_Contrast_Level_3);             //配置LCD的对比度
    LCD_DeadTimeConfig(LCD_DeadTime_0);                  // 配置LCD液晶的死区时间
    LCD_PulseOnDurationConfig(LCD_PulseOnDuration_1);    // 配置LCD脉冲持续时间。

    LCD_Cmd(ENABLE);   //使能LCD控制器

while (1)
{   
       display_LCD(temp);
            temp++;
            if(temp==100)
            temp=0;      
}
}
//////**********************************************************************//////////


//////*****************************LCD显示函数*****************************//////////
void display_LCD(unsigned int temp)
{
   unsigned int shi,ge;
            shi=temp/10;
            ge=temp%10;

    //********************十位显示********************//////////
       switch(shi)

       {
      case 1:
         {
                           //显示十位1   
               //   LCD_WriteRAM(LCD_RAMRegister_5,0X40);
                  assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_5));
                  LCD->RAM = 0x40|(LCD->RAM);
               // LCD_WriteRAM(LCD_RAMRegister_12,0X40);
                  assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_12));
                  LCD->RAM = 0x40|(LCD->RAM);
                  break;
          }
       case 2:
      {
                              //显示十位2
               //   LCD_WriteRAM(LCD_RAMRegister_2,0X08);
          assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_2));
          LCD->RAM = 0x08|(LCD->RAM);
                //LCD_WriteRAM(LCD_RAMRegister_5,0X80);
          assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_5));
          LCD->RAM = 0x80|(LCD->RAM);
               // LCD_WriteRAM(LCD_RAMRegister_9,0X04);
          assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_9));
          LCD->RAM = 0x04|(LCD->RAM);
               // LCD_WriteRAM(LCD_RAMRegister_12,0XC0);
          assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_12));
          LCD->RAM = 0xC0|(LCD->RAM);
                  break;
      }
       case 3:
       {
                            //显示十位3
               // LCD_WriteRAM(LCD_RAMRegister_2,0X08);
          assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_2));
          LCD->RAM = 0x08|(LCD->RAM);         
               // LCD_WriteRAM(LCD_RAMRegister_5,0X40);
          assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_5));
          LCD->RAM = 0x40|(LCD->RAM);         
               // LCD_WriteRAM(LCD_RAMRegister_9,0X04);
          assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_9));
          LCD->RAM = 0x04|(LCD->RAM);                  
               // LCD_WriteRAM(LCD_RAMRegister_12,0XC0);   
          assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_12));
          LCD->RAM = 0xC0|(LCD->RAM);         
                  break;
       }
       case 4:
       {
                        //显示十位4   
               //   LCD_WriteRAM(LCD_RAMRegister_5,0X40);
         assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_5));
         LCD->RAM = 0x40|(LCD->RAM);
               // LCD_WriteRAM(LCD_RAMRegister_9,0X0C);
         assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_9));
          LCD->RAM = 0x0C|(LCD->RAM);                  
                //LCD_WriteRAM(LCD_RAMRegister_12,0X40);
          assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_12));
          LCD->RAM = 0x40|(LCD->RAM);                  
                  break;
       }
       case 5:
       {
                         //显示十位5
               // LCD_WriteRAM(LCD_RAMRegister_2,0X08);
          assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_2));
          LCD->RAM = 0x08|(LCD->RAM);            
                  //LCD_WriteRAM(LCD_RAMRegister_5,0X40);
            assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_5));
         LCD->RAM = 0x40|(LCD->RAM);         
               //   LCD_WriteRAM(LCD_RAMRegister_9,0X0C);
            assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_9));
          LCD->RAM = 0x0C|(LCD->RAM);            
               // LCD_WriteRAM(LCD_RAMRegister_12,0X80);
          assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_12));
          LCD->RAM = 0x80|(LCD->RAM);            
                  break;

       }
       case 6:
         {
                           //显示十位6
                //LCD_WriteRAM(LCD_RAMRegister_2,0X08);
          assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_2));
          LCD->RAM = 0x08|(LCD->RAM);                  
                //LCD_WriteRAM(LCD_RAMRegister_5,0XC0);
            assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_5));
         LCD->RAM = 0xC0|(LCD->RAM);               
               // LCD_WriteRAM(LCD_RAMRegister_9,0X0C);
            assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_9));
          LCD->RAM = 0x0C|(LCD->RAM);               
                //LCD_WriteRAM(LCD_RAMRegister_12,0X80);   
          assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_12));
          LCD->RAM = 0x80|(LCD->RAM);            
                  break;
         }
       case 7:
         {
                        //显示十位7   
                //LCD_WriteRAM(LCD_RAMRegister_5,0X40);   
            assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_5));
         LCD->RAM = 0x40|(LCD->RAM);            
               //   LCD_WriteRAM(LCD_RAMRegister_12,0XC0);   
          assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_12));
          LCD->RAM = 0xC0|(LCD->RAM);            
                  break;
         }
       case 8:
         {
                        //显示十位8
                //LCD_WriteRAM(LCD_RAMRegister_2,0X08);   
          assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_2));
          LCD->RAM = 0x08|(LCD->RAM);               
                //LCD_WriteRAM(LCD_RAMRegister_5,0XC0);      
            assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_5));
         LCD->RAM = 0xC0|(LCD->RAM);               
                //LCD_WriteRAM(LCD_RAMRegister_9,0X0C);      
             assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_9));
          LCD->RAM = 0x0C|(LCD->RAM);            
               //   LCD_WriteRAM(LCD_RAMRegister_12,0XC0);   
         assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_12));
          LCD->RAM = 0xC0|(LCD->RAM);            
                  break;
         }
       case 9:
         {
                        //显示十位9
                //LCD_WriteRAM(LCD_RAMRegister_2,0X08);   
          assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_2));
          LCD->RAM = 0x08|(LCD->RAM);            
                //LCD_WriteRAM(LCD_RAMRegister_5,0X40);
            assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_5));
         LCD->RAM = 0x40|(LCD->RAM);            
                //LCD_WriteRAM(LCD_RAMRegister_9,0X0C);
             assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_9));
          LCD->RAM = 0x0C|(LCD->RAM);               
                //LCD_WriteRAM(LCD_RAMRegister_12,0XC0);
         assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_12));
          LCD->RAM = 0xC0|(LCD->RAM);            
                  break;
         }

   }
   //************************************************************//////
//******************个位显示******************************//////
      switch(ge)

       {
      case 0:
         {
                      //显示个位0   
                //LCD_WriteRAM(LCD_RAMRegister_2,0X02);
          assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_2));
          LCD->RAM = 0x02|(LCD->RAM);            
                //LCD_WriteRAM(LCD_RAMRegister_5,0X30);
         assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_5));
          LCD->RAM = 0x30|(LCD->RAM);         
                //LCD_WriteRAM(LCD_RAMRegister_9,0X02);
          assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_9));
          LCD->RAM = 0x02|(LCD->RAM);            
                // LCD_WriteRAM(LCD_RAMRegister_12,0X30);   
          assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_12));
          LCD->RAM = 0x30|(LCD->RAM);            
                  break;
          }
       case 1:
      {
                  //显示个位1   
               // LCD_WriteRAM(LCD_RAMRegister_5,0X10);
          assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_5));
          LCD->RAM = 0x10|(LCD->RAM);         
               // LCD_WriteRAM(LCD_RAMRegister_12,0X10);
          assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_12));
          LCD->RAM = 0x10|(LCD->RAM);         
                  break;
      }
       case 2:
       {
                  //显示个位2
                //LCD_WriteRAM(LCD_RAMRegister_2,0X02);   
          assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_2));
          LCD->RAM = 0x02|(LCD->RAM);            
               // LCD_WriteRAM(LCD_RAMRegister_5,0X20);
         assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_5));
          LCD->RAM = 0x20|(LCD->RAM);            
                //LCD_WriteRAM(LCD_RAMRegister_9,0X01);
          assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_9));
          LCD->RAM = 0x01|(LCD->RAM);            
                //LCD_WriteRAM(LCD_RAMRegister_12,0X30);
          assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_12));
          LCD->RAM = 0x30|(LCD->RAM);            
                  break;
       }
       case 3:
       {
                        //显示个位3
               // LCD_WriteRAM(LCD_RAMRegister_2,0X02);   
          assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_2));
          LCD->RAM = 0x02|(LCD->RAM);            
               // LCD_WriteRAM(LCD_RAMRegister_5,0X10);
            assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_5));
          LCD->RAM = 0x10|(LCD->RAM);            
                // LCD_WriteRAM(LCD_RAMRegister_9,0X01);
          assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_9));
          LCD->RAM = 0x01|(LCD->RAM);            
                //LCD_WriteRAM(LCD_RAMRegister_12,0X30);   
          assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_12));
          LCD->RAM = 0x30|(LCD->RAM);            
                  break;
       }
       case 4:
       {
                   //显示个位4   
                //LCD_WriteRAM(LCD_RAMRegister_5,0X10);
            assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_5));
          LCD->RAM = 0x10|(LCD->RAM);            
                //LCD_WriteRAM(LCD_RAMRegister_9,0X03);   
          assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_9));
          LCD->RAM = 0x03|(LCD->RAM);            
                //LCD_WriteRAM(LCD_RAMRegister_12,0X10);   
          assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_12));
          LCD->RAM = 0x10|(LCD->RAM);            
                  break;

       }
       case 5:
         {
                        //显示个位5
                //LCD_WriteRAM(LCD_RAMRegister_2,0X02);   
          assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_2));
          LCD->RAM = 0x02|(LCD->RAM);               
                //LCD_WriteRAM(LCD_RAMRegister_5,0X10);
            assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_5));
          LCD->RAM = 0x10|(LCD->RAM);               
                //LCD_WriteRAM(LCD_RAMRegister_9,0X03);   
          assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_9));
          LCD->RAM = 0x03|(LCD->RAM);               
                //LCD_WriteRAM(LCD_RAMRegister_12,0X20);   
          assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_12));
          LCD->RAM = 0x20|(LCD->RAM);            
                  break;
         }
       case 6:
         {
                   //显示个位6
               //   LCD_WriteRAM(LCD_RAMRegister_2,0X02);   
         assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_2));
          LCD->RAM = 0x02|(LCD->RAM);               
               //   LCD_WriteRAM(LCD_RAMRegister_5,0X30);   
            assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_5));
          LCD->RAM = 0x30|(LCD->RAM);               
                //LCD_WriteRAM(LCD_RAMRegister_9,0X03);   
          assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_9));
          LCD->RAM = 0x03|(LCD->RAM);               
               //   LCD_WriteRAM(LCD_RAMRegister_12,0X20);   
          assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_12));
          LCD->RAM = 0x20|(LCD->RAM);            
                  break;
         }
       case 7:
         {
                  //显示个位7   
               //   LCD_WriteRAM(LCD_RAMRegister_5,0X10);
          assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_5));
          LCD->RAM = 0x10|(LCD->RAM);               
               //   LCD_WriteRAM(LCD_RAMRegister_12,0X30);      
          assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_12));
          LCD->RAM = 0x30|(LCD->RAM);            
                  break;
         }
       case 8:
         {
                  //显示个位8
               //   LCD_WriteRAM(LCD_RAMRegister_2,0X02);   
         assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_2));
          LCD->RAM = 0x02|(LCD->RAM);               
               //   LCD_WriteRAM(LCD_RAMRegister_5,0X30);   
          assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_5));
          LCD->RAM = 0x30|(LCD->RAM);               
               //   LCD_WriteRAM(LCD_RAMRegister_9,0X03);   
          assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_9));
          LCD->RAM = 0x03|(LCD->RAM);               
                //LCD_WriteRAM(LCD_RAMRegister_12,0X30);   
          assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_12));
          LCD->RAM = 0x30|(LCD->RAM);            
                  break;
         }
       case 9:
         {
                  //显示个位9
               //   LCD_WriteRAM(LCD_RAMRegister_2,0X02);   
         assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_2));
          LCD->RAM = 0x02|(LCD->RAM);               
               //   LCD_WriteRAM(LCD_RAMRegister_5,0X10);      
          assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_5));
          LCD->RAM = 0x10|(LCD->RAM);               
               //   LCD_WriteRAM(LCD_RAMRegister_9,0X03);   
         assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_9));
          LCD->RAM = 0x03|(LCD->RAM);               
               //   LCD_WriteRAM(LCD_RAMRegister_12,0X30);   
          assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_12));
          LCD->RAM = 0x30|(LCD->RAM);               
               break;
         }
   }
//**********************************************************//////

   delay(500);
//**********************************************************//////
   //***************************清屏***************************//////
                  LCD_WriteRAM(LCD_RAMRegister_2,0X00);   
                  LCD_WriteRAM(LCD_RAMRegister_5,0X00);      
                  LCD_WriteRAM(LCD_RAMRegister_9,0X00);            
                  LCD_WriteRAM(LCD_RAMRegister_12,0X00);
//**********************************************************//////   
}

//////*********************************延时函数*********************************//////
void delay(unsigned int time)
{unsigned int i,j;
   for(i=0;i<255;i++)
   for(j=time;j>0;j--);
}

teleman 发表于 2015-10-30 20:57:20

先mark      学习

peter001 发表于 2015-10-31 11:13:59

学习,以后会用

Mr.LT 发表于 2016-1-11 11:23:58

peter001 发表于 2015-10-31 11:13
学习,以后会用

显示个位0   
                //LCD_WriteRAM(LCD_RAMRegister_2,0X02);
          assert_param(IS_LCD_RAM_REGISTER(LCD_RAMRegister_2));
          LCD->RAM = 0x02|(LCD->RAM); 大哥你知道这三句什么意思啊,还有为什么显示0是赋值0x02?谢谢给我说下

皆归尘土 发表于 2016-2-28 17:45:26

问下楼主用的152的那个型号呢?

文哥-418283 发表于 2016-7-13 21:38:15

正好有用,感谢分享

libsam 发表于 2016-7-19 11:56:56

感谢楼主,真是帮了大忙

Q112971 发表于 2016-8-30 23:43:43

:'(你好 楼主 你可以发一份源码给我吗? 没有用过STM8公司突然要用跪谢了发我一份Q1129710858

Android-322089 发表于 2016-9-24 17:56:11

学习了!!!

HeartSunny 发表于 2016-11-16 23:03:40

学习,正好要用到

页: [1] 2
查看完整版本: 分享一下STM8L152的段式液晶驱动程序