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