for(j=0;j<100;j++);
}
#ifdefBus_16//条件编译-16位数据模式
voidLCD_Writ_Bus(uintVH,uintVL)//并行数据写入函数
{
//LCD_DataPortH=VH;//高位P1口
//屏蔽高8位将数据送到PA0-PA7
GPIOA->BSRR=VH&0x00ff;
GPIOA->BRR=(~VH)&0x00ff;
//GPIO_SetBits(GPIOA,VH&0x00ff);
//GPIO_ResetBits(GPIOA,(~VH&0x00ff));
//LCD_DataPortL=VL;//低位P0口
//屏蔽低8位将数据送到PB8-PB15
GPIOB->BSRR=(VL)<<8&0xff00;
GPIOB->BRR=((~VL)<<8)&0xff00;
LCD_wr(0);
LCD_wr(1);
}
#else//条件编译-8位数据模式
voidLCD_Writ_Bus(charVH,charVL)//并行数据写入函数
{
//LCD_DataPortH=VH;//八位模式都用P0口送数据
//LCD_wr(0);
//LCD_wr(1);
//LCD_DataPortH=VL;//八位模式都用P0口送数据
//LCD_wr(0);
//LCD_wr(1);
}
#endif
voidLCD_Write_COM(charVH,charVL)//发送命令
{
LCD_rs(0);
LCD_Writ_Bus(VH,VL);
}
voidLCD_Write_DATA(charVH,charVL)//发送数据
{
LCD_rs(1);
LCD_Writ_Bus(VH,VL);
}
voidPant(charVH,charVL)//涂满全屏函数
{
inti,j;
LCD_cs(0);//打开片选使能
Address_set(0,0,239,319);
for(i=0;i<320;i++)
{
for(j=0;j<240;j++)
{
LCD_Write_DATA(VH,VL);
}
}
LCD_cs(1);//关闭片选使能
}
voidAddress_set(unsignedintx1,unsignedinty1,unsignedintx2,unsignedinty2)//设置地址范围函数
{
LCD_Write_COM(0x00,0x20);LCD_Write_DATA(x1>>8,x1);//设置X坐标位置
LCD_Write_COM(0x00,0x21);LCD_Write_DATA(y1>>8,y1);//设置Y坐标位置
LCD_Write_COM(0x00,0x50);LCD_Write_DATA(x1>>8,x1);//开始X
LCD_Write_COM(0x00,0x52);LCD_Write_DATA(y1>>8,y1);//开始Y
LCD_Write_COM(0x00,0x51);LCD_Write_DATA(x2>>8,x2);//结束X
LCD_Write_COM(0x00,0x53);LCD_Write_DATA(y2>>8,y2);//结束Y
LCD_Write_COM(0x00,0x22);
}
voidpic_play(uintStart_X,uintEnd_X,uintStart_Y,uintEnd_Y)
{
uintm;
//LCD_CS=0;
GPIO_ResetBits(GPIOB,LCD_CS);//打开片选
Address_set(Start_X,Start_Y,End_X,End_Y);//指定图片显示的范围
//LCD_RS=1;
GPIO_SetBits(GPIOB,LCD_RS);//关闭片选
//循环把图片的所有数据依次写入
Address_set(0,0,141,79);//用彩屏显示图片时,一定要注意图片长宽比例,如果长宽比例不对的话,显示的图片就会变形
//例如本幅图片取模软件输出的长宽为(177,100),所以在这里图片的显示范围必须设为(0,0,176,99),即x范围为0~176,y的范围为
//0~99.这样图片才能正常显示,否则图片就会变形。
for(m=0;m<22728/2;m++)//这里的35400这个数字指定显示图片的范围,因为该图的数据总共只有35400个,所以这里指定
//整幅图都显示出来。如果这个数比35400小,则只显示该图的一部分。
{
LCD_Write_DATA(gImage_sara[m*2+1],gImage_sara[m*2]);
}
Address_set(0,90,65,189);//一定要注意保持比例
for(m=0;m<13200/2;m++)
{
LCD_Write_DATA(gImage_xiaoqian[m*2+1],gImage_xiaoqian[m*2]);
}
Address_set(75,90,137,189);//一定要注意保持比例
for(m=0;m<12600/2;m++)
{
LCD_Write_DATA(gImage_yang[m*2+1],gImage_yang[m*2]);
}
//LCD_CS=1;
GPIO_SetBits(GPIOB,LCD_CS);//关闭片选
}
主程序main.c
在主程序中完成对系统的初始化配置,利用彩屏的驱动程序完成图片的显示等功能,程序如下:
#include"stm32f10x_lib.h"
#include"lcd.h"
GPIO_InitTypeDefGPIO_InitStructure;//定义GPIO初始化的结构体变量
ErrorStatusHSEStartUpStatus;//定义错误状态变量,为枚举类型
voidRCC_Configuration(void);
voidNVIC_Configuration(void);
voidDelay(vu32nCount);
intmain(void)
{
#ifdefDEBUG
debug();//在线调试使用
#endif
评论