本帖最后由 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); //延時
}
}
|