久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7787|回復: 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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 黄网站在线播放 | 久久久久国色av免费观看性色 | 亚洲国产成人精品女人久久久 | 户外露出一区二区三区 | 91激情视频 | 鸳鸯谱在线观看高清 | 欧美国产中文字幕 | 亚洲视频在线观看 | 国产不卡视频 | www.日本国产 | 久久久久久久久久久成人 | 久草免费在线视频 | 美女视频一区 | 久热久热 | 欧美一区二区三区在线 | 欧美成人综合 | 日韩欧美在线一区 | 国产精品久久久久久久久久久久 | 99福利视频 | 午夜小视频在线观看 | 久久精品视频在线免费观看 | 一区二区三区韩国 | 国产精品美女久久久久久久久久久 | 在线观看黄色大片 | 成人亚洲综合 | 夜夜骑av | h片在线看| 亚洲美女视频 | 免费的av | 成人免费视频网站在线看 | 91视频.com | 中文字幕亚洲一区 | 欧美成人综合 | 色频 | 精品国产乱码一区二区三区 | 99re在线免费视频 | 亚洲第一在线 | 亚洲国产网址 | 婷婷五月色综合香五月 | 国产一区二 | 欧美精品在欧美一区二区少妇 |