欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

       找回密碼
       立即注冊

      QQ登錄

      只需一步,快速開始

      搜索
      查看: 7882|回復: 1
      打印 上一主題 下一主題
      收起左側

      stm32單片機驅動金鵬12232液晶屏(SED1520控制器)

      [復制鏈接]
      跳轉到指定樓層
      樓主
      ID:73735 發表于 2015-2-18 23:48 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
      本帖最后由 huge 于 2015-2-18 23:50 編輯


      OCM12232.c文件:
      #include"stm32f10x_lib.h"
      #include "OCM12232.h"
      const unsigned char tab7[]={
        /*--  文字:  0  --*/
      /*--  宋體12;  此字體下對應的點陣為:寬x高=8x16   --*/
      0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,
      /*--  文字:  1  --*/
      /*--  宋體12;  此字體下對應的點陣為:寬x高=8x16   --*/
      0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,
      /*--  文字:  2  --*/
      /*--  宋體12;  此字體下對應的點陣為:寬x高=8x16   --*/
      0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,
      /*--  文字:  3  --*/
      /*--  宋體12;  此字體下對應的點陣為:寬x高=8x16   --*/
      0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,
      /*--  文字:  4  --*/
      /*--  宋體12;  此字體下對應的點陣為:寬x高=8x16   --*/
      0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,
      /*--  文字:  5  --*/
      /*--  宋體12;  此字體下對應的點陣為:寬x高=8x16   --*/
      0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,
      /*--  文字:  6  --*/
      /*--  宋體12;  此字體下對應的點陣為:寬x高=8x16   --*/
      0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,
      /*--  文字:  7  --*/
      /*--  宋體12;  此字體下對應的點陣為:寬x高=8x16   --*/
      0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,
      /*--  文字:  8  --*/
      /*--  宋體12;  此字體下對應的點陣為:寬x高=8x16   --*/
      0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,
      /*--  文字:  9  --*/
      /*--  宋體12;  此字體下對應的點陣為:寬x高=8x16   --*/
      0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,
      /*--  文字:  %  --*/
      /*--  宋體12;  此字體下對應的點陣為:寬x高=8x16   --*/
      0xF0,0x08,0xF0,0x00,0xE0,0x18,0x00,0x00,0x00,0x21,0x1C,0x03,0x1E,0x21,0x1E,0x00,
      /*--  文字:  .  --*/
      /*--  宋體12;  此字體下對應的點陣為:寬x高=8x16   --*/
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,
      };
      void Lcd12232delay(unsigned int Time)//延時函數
      {
        unsigned int i,j;
        for ( i=0;i<Time;i++)
        for (j=0;j<1000;j++);
      }
      void Delay(unsigned int us)//延時微秒函數
      {
        unsigned int m,k;
        for ( m=0;m<us;m++)
          for (k=0;k<72;k++);;
      }
      void LCD_WriteLByte(u8 Byte)//寫PC口的低8位,高8位不變
      {
        u16 Data_PAL;
        Data_PAL = GPIO_ReadOutputData(GPIOC);
        Data_PAL = Data_PAL&0xFF00;//保留高8位數據
        Data_PAL = Data_PAL | Byte;//寫入低8位數據
        GPIO_Write(GPIOC,Data_PAL );
      }
      void w_com1(unsigned char com1)//左半屏寫指令
      {
        A0_0;
        RW_0;
        E1_1;
        Delay(8);
        LCD_WriteLByte(com1);
        Delay(8);
        E1_0;
      }
      void w_com2(unsigned char com2)//右半屏寫指令
      {
        A0_0;
        RW_0;
        E2_1;
        Delay(8);
        LCD_WriteLByte(com2);
        Delay(8);
        E2_0;
      }
      void w_data1(unsigned char data1)//左半屏寫數據
      {
        A0_1;
        RW_0;
        E1_1;
        Delay(8);
        LCD_WriteLByte(data1);
        Delay(8);
        E1_0;
      }
      void w_data2(unsigned char data2)//右半屏寫數據
      {
        A0_1;
        RW_0;
        E2_1;
        Delay(8);
        LCD_WriteLByte(data2);
        Delay(8);
        E2_0;
      }
      void readbusystate1(void)//左半屏忙檢測
      {
        u8 Busy1;
        A0_0;
        while(1)
        {
          RW_1;
          E1_1;
          Delay(8);
          Busy1=GPIO_ReadInputData(GPIOC);
          Delay(8);
          E1_0;
          if((Busy1&0x80)==0x00)
          {return;}
        }
      }
      void readbusystate2(void)//右半屏忙檢測
      {
        u8 Busy2;
        A0_0;
        while(1)
        {
          RW_1;
          E2_1;
          Delay(8);
          Busy2=GPIO_ReadInputData(GPIOC);
          Delay(8);
          E2_0;
          if((Busy2&0x80)==0x00)
          {return;}
        }
      }
      void wr_c(unsigned char command)//寫命令--用于初始化
      {
        readbusystate1();  //檢測左半屏是否忙碌
        w_com1(command);   //寫入左半屏初始化命令
        readbusystate2();  //檢測右半屏是否忙碌
        w_com2(command);   //寫入右半屏初始化命令
      }
      void display_map(const unsigned char *p)  //顯示一幅122*32的圖片,P是圖片首地址
      {
        unsigned char page,seg;
        
        for(page=0xB8;page<0xBC;page++)   //寫頁地址,共4頁,0xB8--0xBC
        {
            w_com1(page);   //頁地址
            w_com1(0xC0);   //行地址
            w_com1(0x00);   //列地址
            for(seg=0;seg<61;seg++)  //寫61列數據值
              {w_data1(*p++);}
            
            w_com2(page);   //頁地址
            w_com2(0xC0);   //行地址
            w_com2(0x00);   //列地址
            for(seg=0;seg<61;seg++)  //寫61列數據值
              {w_data2(*p++);}  
        }
      }
      void all_operate(unsigned char P)  //全部顯示,P位0xff時,為全顯示,P為0x00時為清屏
      {
        unsigned char page,seg;
        
        for(page=0xB8;page<0xBC;page++)
        {
          w_com1(page);   //頁地址
          w_com1(0xC0);   //行地址
          w_com1(0x00);   //列地址
          for(seg=0;seg<61;seg++)  //寫61列數據值
            {w_data1(P);}
            
          w_com2(page);   //頁地址
          w_com2(0xC0);   //行地址
          w_com2(0x00);   //列地址
          for(seg=0;seg<61;seg++)  //寫61列數據值
            {w_data2(P);}
        }
      }
      void ClearOnePage(unsigned char Left_Right,unsigned char page)  //Left_Right取值0和!0,分別表示左右半屏,page表示要清除的頁面
      {
        u8 seg1=0;u8 seg2=0;
        if(0==Left_Right)
        {
          w_com1(0xB8+page);   //頁地址
          w_com1(0xC0);        //行地址
          w_com1(0x00);        //列地址
          for(seg1=0;seg1<61;seg1++)
              {w_data1(0x00);}
        }
        else
        {
          w_com2(0xB8+page);   //頁地址
          w_com2(0xC0);        //行地址
          w_com2(0x00);        //列地址
          for(seg2=0;seg2<61;seg2++)  //寫61列數據值
              {w_data2(0x00);}
        }
      }
      void Displayhz(u8 page,u8 Num,const unsigned char *p)  //從左半屏首列開始在page和page+1頁顯示num個16*16的漢字(包括標點符號)
      {
        u8 j,num;
        if(Num<4)
        {
          for(num=0;num<3;num++)
            {
              w_com1(0xB8+page);   //頁地址
              w_com1(0xC0);        //行地址
              w_com1(0x00+16*num); //列地址
              for(j=0;j<16;j++)    //寫16列數據值
                {w_data1(*p++);}
              
              w_com1(0xB9+page);   //頁地址
              w_com1(0xC0);        //行地址
              w_com1(0x00+16*num); //列地址
              for(j=0;j<16;j++)    //寫16列數據值
                {w_data1(*p++);}
            }
        }
         else if(4==Num)
        {
          for(num=0;num<3;num++)
        {
          w_com1(0xB8+page);   //頁地址
          w_com1(0xC0);        //行地址
          w_com1(0x00+16*num); //列地址
          for(j=0;j<16;j++)
              {w_data1(*p++);}
         
          w_com1(0xB9+page);   //頁地址
          w_com1(0xC0);        //行地址
          w_com1(0x00+16*num); //列地址
          for(j=0;j<16;j++)
              {w_data1(*p++);}
        }
          w_com1(0xB8+page);   //頁地址
          w_com1(0xC0);        //行地址
          w_com1(0x00+16*3); //列地址
          for(j=0;j<13;j++)
              {w_data1(*p++);}
         
          w_com2(0xB8+page);   //頁地址
          w_com2(0xC0);        //行地址
          w_com2(0x00);        //列地址
          for(j=0;j<3;j++)
          {w_data2(*p++);}
         
          w_com1(0xB9+page);   //頁地址
          w_com1(0xC0);        //行地址
          w_com1(0x00+16*3); //列地址
          for(j=0;j<13;j++)
              {w_data1(*p++);}
         
          w_com2(0xB9+page);   //頁地址
          w_com2(0xC0);        //行地址
          w_com2(0x00);        //列地址
          for(j=0;j<3;j++)
              {w_data2(*p++);}
        }
        
        else if(4<Num)
        {
          for(num=0;num<3;num++)
          {
            w_com1(0xB8+page);   //頁地址
            w_com1(0xC0);        //行地址
            w_com1(0x00+16*num); //列地址
            for(j=0;j<16;j++)
              {w_data1(*p++);}
            
            w_com1(0xB9+page);   //頁地址
            w_com1(0xC0);        //行地址
            w_com1(0x00+16*num); //列地址
            for(j=0;j<16;j++)
              {w_data1(*p++);}
          }
          //漢字跨界,左半屏上半部分的13列
          w_com1(0xB8+page);   //頁地址
          w_com1(0xC0);        //行地址
          w_com1(0x00+16*3);   //列地址
          for(j=0;j<13;j++)
              {w_data1(*p++);}
         
          //漢字跨界,右半屏上半部分的3列
          w_com2(0xB8+page);   //頁地址
          w_com2(0xC0);        //行地址
          w_com2(0x00);        //列地址
          for(j=0;j<3;j++)
          {w_data2(*p++);}
         
          //漢字跨界,右半屏的下半部分13列
          w_com1(0xB9+page);   //頁地址
          w_com1(0xC0);        //行地址
          w_com1(0x00+16*3);   //列地址
          for(j=0;j<13;j++)
              {w_data1(*p++);}
         
          //漢字跨界,右半屏的下半部分3列
          w_com2(0xB9+page);   //頁地址
          w_com2(0xC0);        //行地址
          w_com2(0x00);        //列地址
          for(j=0;j<3;j++)
              {w_data2(*p++);}
         
          for(num=4;num<Num;num++)//右半屏繼續顯示漢字
          {
              w_com2(0xB8+page);         //頁地址
              w_com2(0xC0);              //行地址
              w_com2(0x03+16*(num-4));   //列地址
              for(j=0;j<16;j++)
                {w_data2(*p++);}
              
              w_com2(0xB9+page);       //頁地址
              w_com2(0xC0);            //行地址
              w_com2(0x03+16*(num-4)); //列地址
              for(j=0;j<16;j++)
                {w_data2(*p++);}  
          }
        }
        else  return;
      }
      void Disp_xy_hz(u8 page,u8 column,u8 Num,const unsigned char *p)//從左到右跨界于page頁column列開始顯示Num個漢字
      {
        u8 i,j,num,num1,num2,num3;
        num1 = (61-column)/16;  //不需要跨界的漢字的個數
        num2 = 61-column-16*num1;  //跨界漢字左半屏列數
        num3 = 16-num2;     //跨界漢字右半屏列數
         
        for(num=0;num<num1;num++)
        {
          w_com1(0xB8+page);            //頁地址
          w_com1(0xC0);                 //行地址
          w_com1(0x00+column+16*num);   //列地址
          for(i=0;i<16;i++)
            {w_data1(*p++);}
         
          w_com1(0xB9+page);            //頁地址
          w_com1(0xC0);                 //行地址
          w_com1(0x00+column+16*num);   //列地址
          for(i=0;i<16;i++)
            {w_data1(*p++);}
        }
        
          w_com1(0xB8+page);             //頁地址
          w_com1(0xC0);                  //行地址
          w_com1(0x00+column+16*num1);   //列地址
          for(i=0;i<num2;i++)
           {w_data1(*p++);}
         
          w_com2(0xB8+page);            //頁地址
          w_com2(0xC0);                 //行地址
          w_com2(0x00);                 //列地址
          for(i=0;i<num3;i++)
          {w_data2(*p++);}
         
          w_com1(0xB9+page);
          w_com1(0xC0);                  //行地址
          w_com1(0x00+column+16*num1);   //列地址
          for(i=0;i<num2;i++)
           {w_data1(*p++);}
         
          w_com2(0xB9+page);            //頁地址
          w_com2(0xC0);                 //行地址
          w_com2(0x00);                 //列地址
          for(i=0;i<num3;i++)
          {w_data2(*p++);}
         
          for(j=0;j<(Num-num1-1);j++)  //不需要跨界漢字個數Num-num1-1
          {
            w_com2(0xB8+page);            //頁地址
            w_com2(0xC0);                 //行地址
            w_com2(0x00+num3+16*j);       //列地址
            for(i=0;i<16;i++)
              {w_data2(*p++);}
            
            w_com2(0xB9+page);            //頁地址
            w_com2(0xC0);                 //行地址
            w_com2(0x00+num3+16*j);       //列地址
            for(i=0;i<16;i++)
              {w_data2(*p++);}
          }
      }
      void L_DisplayHZ(u8 page,u8 column,u8 Num,const unsigned char *p)  //左半屏Page頁column列開始顯示Num個漢字
      {
        u8 num,i,j;
        for(num=0;num<Num;num++)
        {
          w_com1(0xB8+page);         //頁地址
          w_com1(0xC0);              //行地址
          w_com1(0x00+column+16*num); //列地址
          for(j=0;j<16;j++)
            {w_data1(*p++);}
         
          w_com1(0xB9+page);         //頁地址
          w_com1(0xC0);              //行地址
          w_com1(0x00+column+16*num); //列地址
          for(i=0;i<16;i++)
            {w_data1(*p++);}
        }
      }
      void R_DisplayHZ(u8 page,u8 column,u8 Num,const unsigned char *p)  //右半屏page頁column列開始顯示Num個漢字
      {
        u8 num,i,j;
        for(num=0;num<Num;num++)
        {
          w_com2(0xB8+page);           //頁地址
          w_com2(0xC0);                //行地址
          w_com2(0x00+column+16*num); //列地址
          for(j=0;j<16;j++)
            {w_data2(*p++);}
         
          w_com2(0xB9+page);           //頁地址
          w_com2(0xC0);                //行地址
          w_com2(0x00+column+16*num); //列地址
          for(i=0;i<16;i++)
            {w_data2(*p++);}
        }
      }
      void L_DisplayZF(u8 page,u8 column,u8 Num,const unsigned char *p)  //左半屏從page頁的column列開始顯示Num個字符
      {
        u8 i,j,num;
        for(num=0;num<Num;num++)     //Num個字符
        {
          w_com1(0xB8+page);         //頁地址
          w_com1(0xC0);              //行地址
          w_com1(0x00+column+8*num);       //列地址
          for(i=0;i<8;i++)           //字符寬度為8
            {w_data1(*p++);}
         
          w_com1(0xB9+page);         //頁地址
          w_com1(0xC0);              //行地址
          w_com1(0x00+column+8*num);       //列地址
          for(j=0;j<8;j++)
            {w_data1(*p++);}         //字符寬度為8
        }
      }
      void R_DisplayZF(u8 page,u8 column,u8 Num,const unsigned char *p)  //左半屏從page頁的column列開始顯示Num個字符
      {
        u8 i,j,num;
        for(num=0;num<Num;num++)     //Num個字符
        {
          w_com2(0xB8+page);         //頁地址
          w_com2(0xC0);              //行地址
          w_com2(0x00+column+8*num);       //列地址
          for(i=0;i<8;i++)           //字符寬度為8
            {w_data2(*p++);}
         
          w_com2(0xB9+page);         //頁地址
          w_com2(0xC0);              //行地址
          w_com2(0x00+column+8*num);       //列地址
          for(j=0;j<8;j++)
            {w_data2(*p++);}         //字符寬度為8
        }
      }
      void R_Disp_OneZF(u8 page,u8 column,const unsigned char *p)//右半屏page頁column列開始顯示一個字符
      {
        u8 i,j;
        w_com2(0xB8+page);         //頁地址
        w_com2(0xC0);              //行地址
        w_com2(0x00+column);       //列地址
        for(i=0;i<8;i++)           //字符寬度為8
          {w_data2(*p++);}
         
        w_com2(0xB9+page);         //頁地址
        w_com2(0xC0);              //行地址
        w_com2(0x00+column);       //列地址
        for(j=0;j<8;j++)
          {w_data2(*p++);}         //字符寬度為8
      }
      void Disp_TestNum(u8 page,u8 column,u16 Num)//右半屏顯示測試數據和正確率百分比
      {
        u8 num1,num2,num3;
        float percent;
        u16 percent1;
        u8 percent2,percent3,percent4;
        num1 = Num/100;        //百位數據
        num2 = (Num%100)/10;   //十位數據
        num3 = (Num%100)%10;   //個位數據
        
        percent = ((float) Num/640)*100;  //百分數
        percent1 = (int) (percent*10);    //取百分數的高三位數值
        percent2 = percent1/100;          //個分位值
        percent3 = (percent1%100)/10;     //十分位值
        percent4 = (percent1%100)%10;     //百分位值
        
        if(num1>0)  //測試數據>=100
        {
          R_Disp_OneZF(page,column,&tab7[16*num1]);     //顯示百位
          R_Disp_OneZF(page,column+8,&tab7[16*num2]);   //顯示十位
          R_Disp_OneZF(page,column+16,&tab7[16*num3]);  //顯示個位
        }
        else   //測試數據小于100,大于等于10
        {
          if(num2>0)
          {
            R_Disp_OneZF(page,column,&tab7[16*num2]);
            R_Disp_OneZF(page,column+8,&tab7[16*num3]);
          }
          else    //測試數據小于10,大于0
          {
            if(num3>0)
            {
              R_Disp_OneZF(page,column,&tab7[16*num3]);
            }
            else   //測試數據=0
            {
              R_Disp_OneZF(page,column,&tab7[16*num3]);
            }
          }
        }
        
        if((0<Num)&(Num<640))
        {
          R_Disp_OneZF(page+2,column,&tab7[16*percent2]);    //顯示個分位
          R_Disp_OneZF(page+2,column+8,&tab7[16*percent3]);  //顯示十分位
          R_Disp_OneZF(page+2,column+16,&tab7[11*16]);       //顯示小數點
          R_Disp_OneZF(page+2,column+24,&tab7[16*percent4]);  //顯示百分位
          R_Disp_OneZF(page+2,column+32,&tab7[10*16]);        //顯示百分號%
        }
        else
          if(640==Num)
        {
          R_Disp_OneZF(page+2,column,&tab7[16]);           //顯示個分位
          R_Disp_OneZF(page+2,column+8,&tab7[0]);          //顯示十分位
          R_Disp_OneZF(page+2,column+16,&tab7[0]);         //顯示百分位
          R_Disp_OneZF(page+2,column+24,&tab7[10*16]);     //顯示百分號%
        }
        else
          if(0==Num)
          {
            R_Disp_OneZF(page+2,column,&tab7[0]);          //顯示0
          }
        else
        {
          return;
        }
      }
      void init_lcd (void)  //初始化
      {
        RES_0;
        Delay(100);
        RES_1;
        Delay(100);
        
        wr_c(0xe2);  //復位
        Delay(100);
        
        wr_c(0xae);  //顯示關閉
        wr_c(0xa4);  //動態驅動
        wr_c(0xa9);  //刷新時鐘設置1/32
        wr_c(0xa0);  //ADC
        
        wr_c(0xee);  //END指令
        wr_c(0x00);  //從首列顯示
        wr_c(0xc0);  //從首行顯示
        
        wr_c(0xaf);  //顯示打開
      }
      OCM12232.h文件:
      #ifndef _OCM12232_h_
      #define _OCM12232_h_

      #define RES_0            GPIO_ResetBits(GPIOC, GPIO_Pin_8)
      #define RES_1            GPIO_SetBits(GPIOC, GPIO_Pin_8)  //LCD上升沿復位,復位之后保持高電平
      #define E1_0             GPIO_ResetBits(GPIOC, GPIO_Pin_9)     //ENABLE1=0,LCD讀寫禁止
      #define E1_1             GPIO_SetBits(GPIOC, GPIO_Pin_9)   //ENABLE1=1,LCD讀寫使能
      #define E2_0             GPIO_ResetBits(GPIOC, GPIO_Pin_10)   //ENABLE2=0,LCD讀寫禁止
      #define E2_1             GPIO_SetBits(GPIOC, GPIO_Pin_10)     //ENABLE2=1,LCD讀寫使能
      #define RW_0             GPIO_ResetBits(GPIOC, GPIO_Pin_11) //R/W=0,LCD寫允許
      #define RW_1             GPIO_SetBits(GPIOC, GPIO_Pin_11)   //R/W=1,LCD讀允許
      #define A0_0             GPIO_ResetBits(GPIOC, GPIO_Pin_12)//Ao=0,向LCD寫入指令
      #define A0_1             GPIO_SetBits(GPIOC, GPIO_Pin_12)  //Ao=1,向LCD輸入數據
      void Lcd12232delay(unsigned int Time);  //延時函數
      void Delay(unsigned int us);  //延時微秒函數
      void LCD_WriteLByte(u8 Byte);  //寫PC口的低8位,高8位不變
      void w_com1(unsigned char com1);  //左半屏寫指令
      void w_com2(unsigned char com2);  //右半屏寫指令
      void w_data1(unsigned char data1);  //左半屏寫數據
      void w_data2(unsigned char data2);  //右半屏寫數據
      void readbusystate1(void);  //左半屏忙檢測
      void readbusystate2(void);  //右半屏忙檢測
      void wr_c(unsigned char command);  //寫命令--用于初始化
      void display_map(const unsigned char *p);  //顯示一幅122*32的圖片,P是圖片首地址
      void all_operate(unsigned char P);  //全部顯示,P位0xff時,為全顯示,P為0x00時為清屏
      void ClearOnePage(unsigned char Left_Right,unsigned char page);  //Left_Right取值0和!0,分別表示左右半屏,page表示要清除的頁面
      void Displayhz(u8 page,u8 Num,const unsigned char *p);  //從左半屏首列開始在page和page+1頁顯示num個16*16的漢字(包括標點符號)
      void L_DisplayHZ(u8 page,u8 column,u8 Num,const unsigned char *p);  //左半屏Page頁column列開始顯示Num個漢字
      void R_DisplayHZ(u8 page,u8 column,u8 Num,const unsigned char *p);  //右半屏page頁column列開始顯示Num個漢字
      void L_DisplayZF(u8 page,u8 column,u8 Num,const unsigned char *p);  //左半屏從page頁的column列開始顯示Num個字符
      void R_DisplayZF(u8 page,u8 column,u8 Num,const unsigned char *p);  //左半屏從page頁的column列開始顯示Num個字符
      void init_lcd (void);//初始化
      void R_Disp_OneZF(u8 page,u8 column,const unsigned char *p);//右半屏page頁column列開始顯示一個字符
      void Disp_xy_hz(u8 page,u8 column,u8 Num,const unsigned char *p);//從左到右跨界于page頁column列開始顯示Num個漢字
      void Disp_TestNum(u8 page,u8 column,u16 Num);//右半屏顯示測試數據和正確率百分比
      #endif
      hw_conf.c文件:
      #include"stm32f10x_lib.h"
      #include "hw_conf.h"
      #include "OCM12232.h"
      ErrorStatus HSEStartUpStatus;
      void RCC_Configuration(void)
      {
        RCC_DeInit();
        RCC_HSEConfig(RCC_HSE_ON);
        HSEStartUpStatus = RCC_WaitForHSEStartUp();
        if(HSEStartUpStatus == SUCCESS)
        {
          FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
          FLASH_SetLatency(FLASH_Latency_2);
          RCC_HCLKConfig(RCC_SYSCLK_Div1);
          RCC_PCLK2Config(RCC_HCLK_Div1);
          RCC_PCLK1Config(RCC_HCLK_Div2);
          RCC_PLLConfig(RCC_PLLSource_HSE_Div2, RCC_PLLMul_3);
          RCC_PLLCmd(ENABLE);
          while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
          {
          }
          RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
          while(RCC_GetSYSCLKSource() != 0x08)
          {
          }
        }
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
      }

      void GPIO_Configuration(void)
      {
        GPIO_InitTypeDef GPIO_InitStructure;
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
        GPIO_Init(GPIOC, &GPIO_InitStructure);
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_Init(GPIOC, &GPIO_InitStructure);
      }

      void NVIC_Configuration(void)
      {
      #ifdef  VECT_TAB_RAM
        NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
      #else
        NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
      #endif
      }
      void Setup_System(void)
      {
      RCC_Configuration();
      GPIO_Configuration();
      NVIC_Configuration();
      }
      hw_conf.c文件:
      #ifndef   _hw_conf_H_
      #define   _hw_conf_H_
      extern void Setup_System(void);
      #endif
      main.c文件:
      #include"stm32f10x_lib.h"
      #include "hw_conf.h"
      #include"OCM12232.h"
      const unsigned char tab1[]={
      /*--  文字:  歡  --*/
      /*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
      0x14,0x24,0x44,0x84,0x64,0x1C,0x20,0x18,0x0F,0xE8,0x08,0x08,0x28,0x18,0x08,0x00,
      0x20,0x10,0x4C,0x43,0x43,0x2C,0x20,0x10,0x0C,0x03,0x06,0x18,0x30,0x60,0x20,0x00,
      /*--  文字:  迎  --*/
      /*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
      0x40,0x41,0xCE,0x04,0x00,0xFC,0x04,0x02,0x02,0xFC,0x04,0x04,0x04,0xFC,0x00,0x00,
      0x40,0x20,0x1F,0x20,0x40,0x47,0x42,0x41,0x40,0x5F,0x40,0x42,0x44,0x43,0x40,0x00,
      /*--  文字:  使  --*/
      /*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
      0x40,0x20,0xF0,0x1C,0x07,0xF2,0x94,0x94,0x94,0xFF,0x94,0x94,0x94,0xF4,0x04,0x00,
      0x00,0x00,0x7F,0x00,0x40,0x41,0x22,0x14,0x0C,0x13,0x10,0x30,0x20,0x61,0x20,0x00,
      /*--  文字:  用  --*/
      /*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
      0x00,0x00,0x00,0xFE,0x22,0x22,0x22,0x22,0xFE,0x22,0x22,0x22,0x22,0xFE,0x00,0x00,
      0x80,0x40,0x30,0x0F,0x02,0x02,0x02,0x02,0xFF,0x02,0x02,0x42,0x82,0x7F,0x00,0x00,
      };
      const unsigned char tab2[]={
        /*--  文字:  P  --*/
      /*--  宋體12;  此字體下對應的點陣為:寬x高=8x16   --*/
      0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00,
      /*--  文字:  S  --*/
      /*--  宋體12;  此字體下對應的點陣為:寬x高=8x16   --*/
      0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00,
      /*--  文字:  6  --*/
      /*--  宋體12;  此字體下對應的點陣為:寬x高=8x16   --*/
      0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,
      /*--  文字:  4  --*/
      /*--  宋體12;  此字體下對應的點陣為:寬x高=8x16   --*/
      0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,
      /*--  文字:  0  --*/
      /*--  宋體12;  此字體下對應的點陣為:寬x高=8x16   --*/
      0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,
      };
      const unsigned char tab3[]={
      /*--  文字:  噴  --*/
      /*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
      0xFC,0x04,0x04,0xFC,0x00,0x24,0xA4,0xFC,0xA4,0xBF,0xA4,0xFC,0xA4,0x24,0x20,0x00,
      0x07,0x01,0x01,0x03,0x00,0x80,0x4F,0x20,0x18,0x07,0x08,0x10,0x2F,0xE0,0x40,0x00,
      /*--  文字:  頭  --*/
      /*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
      0x00,0x00,0x00,0x12,0x64,0x2C,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x01,0x01,0x81,0x41,0x21,0x11,0x09,0x05,0x03,0x05,0x19,0x31,0xE1,0x41,0x01,0x00,
      /*--  文字:  測  --*/
      /*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
      0x08,0x31,0x86,0x60,0x00,0xFE,0x02,0xF2,0x02,0xFE,0x00,0xF8,0x00,0x00,0xFF,0x00,
      0x04,0xFC,0x03,0x00,0x80,0x47,0x30,0x0F,0x10,0x67,0x00,0x07,0x40,0x80,0x7F,0x00,
      /*--  文字:  試  --*/
      /*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
      0x40,0x42,0xDC,0x08,0x00,0x90,0x90,0x90,0x90,0x90,0xFF,0x10,0x12,0x1C,0x10,0x00,
      0x00,0x00,0x7F,0x20,0x10,0x20,0x20,0x1F,0x10,0x10,0x01,0x06,0x18,0x20,0x78,0x00,
      /*--  文字:  儀  --*/
      /*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
      0x40,0x20,0xF0,0x0C,0x03,0x00,0x38,0xC0,0x01,0x0E,0x04,0xE0,0x1C,0x00,0x00,0x00,
      0x00,0x00,0xFF,0x00,0x40,0x40,0x20,0x10,0x0B,0x04,0x0B,0x10,0x20,0x60,0x20,0x00,
      /*--  文字:  !  --*/
      /*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
      0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x00,0x5F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      };
      const unsigned char tab4[]={
      /*--  文字:  測  --*/
      /*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
      0x08,0x31,0x86,0x60,0x00,0xFE,0x02,0xF2,0x02,0xFE,0x00,0xF8,0x00,0x00,0xFF,0x00,
      0x04,0xFC,0x03,0x00,0x80,0x47,0x30,0x0F,0x10,0x67,0x00,0x07,0x40,0x80,0x7F,0x00,
      /*--  文字:  試  --*/
      /*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
      0x40,0x42,0xDC,0x08,0x00,0x90,0x90,0x90,0x90,0x90,0xFF,0x10,0x12,0x1C,0x10,0x00,
      0x00,0x00,0x7F,0x20,0x10,0x20,0x20,0x1F,0x10,0x10,0x01,0x06,0x18,0x20,0x78,0x00,
      /*--  文字:  中  --*/
      /*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
      0x00,0x00,0xFC,0x08,0x08,0x08,0x08,0xFF,0x08,0x08,0x08,0x08,0xFC,0x08,0x00,0x00,
      0x00,0x00,0x07,0x02,0x02,0x02,0x02,0xFF,0x02,0x02,0x02,0x02,0x07,0x00,0x00,0x00,
      /*--  文字:  …  --*/
      /*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
      0x00,0xC0,0xC0,0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      };
      const unsigned char tab5[]={
        /*--  文字:  完  --*/
      /*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
      0x00,0x90,0x8C,0xA4,0xA4,0xA4,0xA5,0xA6,0xA4,0xA4,0xA4,0xA4,0x94,0x8C,0x04,0x00,
      0x00,0x80,0x40,0x20,0x18,0x07,0x00,0x00,0x00,0x3F,0x40,0x40,0x40,0x70,0x00,0x00,
      /*--  文字:  好  --*/
      /*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
      0x10,0x10,0xF0,0x1F,0x10,0xF0,0x80,0x82,0x82,0x82,0xF2,0x8A,0x86,0x82,0x80,0x00,
      0x80,0x43,0x22,0x14,0x0C,0x73,0x20,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,
      /*--  文字:  數  --*/
      /*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
      0x10,0x92,0x54,0x38,0xFF,0x38,0x54,0x52,0x80,0xF0,0x1F,0x12,0x10,0xF0,0x10,0x00,
      0x42,0x42,0x2A,0x2E,0x13,0x1A,0x26,0x02,0x40,0x20,0x13,0x0C,0x33,0x60,0x20,0x00,
      /*--  文字:  目  --*/
      /*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
      0x00,0x00,0x00,0xFE,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0xFE,0x00,0x00,0x00,
      0x00,0x00,0x00,0x7F,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x7F,0x00,0x00,0x00,
      /*--  文字:  :  --*/
      /*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x36,0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      };
      const unsigned char tab6[]={
      /*--  文字:  正  --*/
      /*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
      0x00,0x02,0x02,0xC2,0x02,0x02,0x02,0x02,0xFE,0x82,0x82,0x82,0x82,0x82,0x02,0x00,
      0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
      /*--  文字:  確  --*/
      /*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
      0x00,0x84,0xE4,0x5C,0x44,0xC4,0x10,0xF8,0x97,0x92,0xF2,0x9A,0x96,0xF2,0x00,0x00,
      0x01,0x00,0x3F,0x08,0x88,0x4F,0x30,0x0F,0x04,0x04,0x3F,0x44,0x84,0x7F,0x00,0x00,
      /*--  文字:  率  --*/
      /*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
      0x00,0x0C,0x14,0xA4,0x04,0x64,0x35,0xAE,0x64,0x24,0x14,0xA4,0x14,0x04,0x04,0x00,
      0x08,0x0A,0x09,0x08,0x08,0x0A,0x0B,0xFE,0x0A,0x0B,0x0C,0x08,0x09,0x0A,0x08,0x00,
      /*--  文字:  為  --*/
      /*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
      0x00,0x10,0x10,0x12,0x14,0x1C,0x10,0xF0,0x9F,0x10,0x10,0x10,0x10,0xF8,0x10,0x00,
      0x00,0x00,0x40,0x20,0x10,0x08,0x06,0x01,0x00,0x11,0x26,0x40,0x20,0x1F,0x00,0x00,
      /*--  文字:  :  --*/
      /*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      0x00,0x00,0x36,0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
      };
      void main(void)
      {
      Setup_System();        //系統啟動
        
      init_lcd ();           //LCD初始化
        
      all_operate(0x00);     //清屏
        
      while(1)
      {
      all_operate(0x00);    //清屏
         
      Displayhz(0,4,tab1);   //從左半屏首列開始在page和page+1頁顯示num個16*16的漢字(包括標點符號)--顯示"歡迎使用"
         
          R_DisplayZF(0,5,5,tab2);  //右半屏從page頁的column列開始顯示Num個字符--顯示"PS640"
         
          Disp_xy_hz(2,0,6,tab3);  //從左到右跨界于page頁column列開始顯示Num個漢字--顯示"噴頭測試儀!"
         
      Lcd12232delay(1000);
         
      all_operate(0x00);  //清屏
         
      Disp_xy_hz(1,30,4,tab4);  //從左到右跨界于page頁column列開始顯示Num個漢字--顯示"測試中..."
         
      Lcd12232delay(1000);  //延時
         
      all_operate(0x00);  //清屏
         
      Disp_xy_hz(0,5,5,tab5);  //從左到右跨界于page頁column列開始顯示Num個漢字--顯示"完好數目:"
         
      Disp_xy_hz(2,5,5,tab6);  //從左到右跨界于page頁column列開始顯示Num個漢字--顯示"正確率為:"
         
      Lcd12232delay(1000);  //延時
         
      Disp_TestNum(0,15,0);  //右半屏顯示測試數據
         
      Lcd12232delay(1000);  //延時
        }
      }

      分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
      收藏收藏1 分享淘帖 頂 踩
      回復

      使用道具 舉報

      沙發
      ID:80102 發表于 2015-5-15 19:21 | 只看該作者
      你好   請問我用你的程序去驅動ZXM12232G2(控制器為SED1520),并修改了相應的引腳配置,為什么顯示屏依舊沒顯示呢
      回復

      使用道具 舉報

      您需要登錄后才可以回帖 登錄 | 立即注冊

      本版積分規則

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

      Powered by 單片機教程網

      快速回復 返回頂部 返回列表