STM32写汉字 同步显示0-32字节写过程程序测试

/***写汉字 同步显示0-32字节写过程程序测试***/

/***2018 1 28 21:15 L217 CODE 220340*********/

#include <stm32f10x_lib.h>

#include "sys.h"

#include "stdio.h"

#include "usart.h"

#include "delay.h"

#include "led.h"

#include "flash.h"

#include "lcd.h"

#include "text.h"

#include "fat.h"

#include "fontupd.h"

#include "mmc_sd.h"

const unsigned char Hz132=

{

0x10,0x00,0x10,0x00,0x3D,0xFC,0x20,0x20,

0x40,0x20,0xBC,0x20,0x10,0x20,0x10,0x20,

0xFD,0xFC,0x10,0x20,0x10,0x28,0x10,0x24,

0x14,0x24,0x18,0x20,0x13,0xFE,0x00,0x00

};/*"钰"*/

const unsigned char Hz232=

{

0X01,0XFF,0X01,0XFF,0X01,0XFF,0X01,0XFF,

0X01,0XFF,0X01,0XFF,0X01,0XFF,0X01,0XFF,

0X01,0XFF,0X01,0XFF,0X01,0XFF,0X01,0XFF,

0X01,0XFF,0X01,0XFF,0X01,0XFF,0X01,0XFF

};/*"竖条"*/

const unsigned char Hz332=

{

0X00,0X01,0X00,0X03,0X00,0X07,0X00,0X0F,

0X00,0X1F,0X00,0X3F,0X00,0X7F,0X00,0XFF,

0X01,0XFF,0X03,0XFF,0X07,0XFF,0X0F,0XFF,

0X1F,0XFF,0X3F,0XFF,0X7F,0XFF,0XFF,0XFF

};/*三角形*/

const u8 disdt\[\]={48,49,50,51,52,53,54,55,56,57};

/**************写汉字字节数显示*********/

void dispvavel(u8 vel)

{

u8 l,m,n;

l=vel/100;

m=(vel-l*100)/10;

n=vel-l*100-m*10;

POINT_COLOR=RED;//设置字体为红色

LCD_ShowChar(10,32,disdtl,16,0); //10横向 90纵向disdt\[\]

POINT_COLOR=BLUE;//设置字体为蓝色

LCD_ShowChar(18,32,disdtm,16,0); //18横向 90纵向disdt\[\]

POINT_COLOR=BROWN;//设置字体为棕色

LCD_ShowChar(26,32,disdtn,16,0); //26横向 90纵向disdt\[\]

}

/**************写一个"沁"字***********Hz1************/

void LcdShowHz1(u16 x,u16 y)

{

u8 temp,t1,t,k; //数据缓冲 一个字节循环 汉字字节总数

u8 x0,s=0; //数据缓冲 一个字节循环 汉字字节总数

for(t=0;t<16;t++) //共16个字节

{

x0=x; //汉字左边缘等于实参

for(k=0;k<2;k++) //两行等于两字节,左右结构

{

dispvavel(s); //临时函数,写汉字字节显示

temp=Hz1s; //取字符表代码

for(t1=0;t1<8;t1++) //一个字节左移8次 读每移动一次后0或1

{

if(temp&0x80)

{

LCD_DrawPoint(x0,y); //如为1在XY地址写显示

}

temp<<=1; //左移一位

x0++; //水平位置加1共0--15计16个点

}

s++; // 写完1字节八个点 字符表位置加1

delay_ms(600);

}

y++; //两个字节换一行

}

}

/**************画一个竖条 左部00H 右部FFH***Hz2*************/

void LcdShowHz2(u16 x,u16 y)

{

u8 temp,t1,t,k; //数据缓冲 一个字节循环 汉字字节总数

u8 x0,s=0; //数据缓冲 一个字节循环 汉字字节总数

for(t=0;t<16;t++) //共16个字节

{

x0=x; //汉字左边缘等于实参

for(k=0;k<2;k++) //两行等于两字节,左右结构

{

dispvavel(s); //临时函数,写汉字字节显示

temp=Hz2s; //取字符表代码

for(t1=0;t1<8;t1++) //一个字节左移8次 读每移动一次后0或1

{

if(temp&0x80)

{

LCD_DrawPoint(x0,y); //如为1在XY地址写显示

}

temp<<=1; //左移一位

x0++; //水平位置加1共0--15计16个点

}

s++; // 写完1字节八个点 字符表位置加1

delay_ms(600);

}

y++; //两个字节换一行

}

}

/***************画一个三角形****Hz3******************/

void LcdShowHz3(u16 x,u16 y)

{

u8 temp,t1,t,k; //数据缓冲 一个字节循环 汉字字节总数

u8 x0,s=0; //数据缓冲 一个字节循环 汉字字节总数

for(t=0;t<16;t++) //共16个字节

{

x0=x; //汉字左边缘等于实参

for(k=0;k<2;k++) //两行等于两字节,左右结构

{

dispvavel(s); //临时函数,写汉字字节显示

temp=Hz3s; //取字符表代码

for(t1=0;t1<8;t1++) //一个字节左移8次 读每移动一次后0或1

{

if(temp&0x80)

{

LCD_DrawPoint(x0,y); //如为1在XY地址写显示

}

temp<<=1; //左移一位

x0++; //水平位置加1共0--15计16个点

}

s++; // 写完1字节八个点 字符表位置加1

delay_ms(600);

}

y++; //两个字节换一行

}

}

/*************************************/

int main(void)

{

u8 i;

Stm32_Clock_Init(9); //系统时钟设置

delay_init(72); //延时初始化

uart_init(72,9600); //串口1初始化

LCD_Init(); //初始化液晶

LED_Init(); //LED初始化

SPI_Flash_Init(); //SPI FLASH初始化

if(Font_Init()) //字库不存在,则更新字库

{

POINT_COLOR=RED;

LCD_Clear(WHITE);

LCD_ShowString(60,50,"Mini STM32");

LCD_ShowString(60,70,"Font Updating...");

//字体更新

SD_Initialize(); //初始化SD卡

while(FAT_Init()) //FAT 错误

{

LCD_ShowString(60,90,"FAT SYS ERROR");

i=SD_Initialize();

if(i)//SD卡初始化

{

LCD_ShowString(60,110,"SD_CARD ERROR");

}

delay_ms(500);

LCD_Fill(60,90,240,126,WHITE);//清除显示

delay_ms(500);

LED0=!LED0;

}

LCD_Fill(60,90,240,126,WHITE);//清除显示

while(Update_Font()!=0)//字体更新出错

{

LCD_ShowString(60,90,"SYSTEM FILE LOST");

delay_ms(500);

LCD_ShowString(60,90,"Please Check....");

delay_ms(500);

LED0=!LED0;

};

LCD_Clear(WHITE);

}

while(1)

{

POINT_COLOR=BLUE;

Show_Str(60,50,"2016 10 5",16,0);

Show_Str(10,70,"蔡沁钰 常州市北实验中学",16,0);

Show_Str(60,90,"八(8)班",16,0);

delay_ms(5000);

delay_ms(5000);

LCD_Clear(WHITE); //清除显示

delay_ms(5000);

POINT_COLOR=RED;

Show_Str(60,32,"1",16,0); //1

LcdShowHz1(00,00); //画横线 已实现

for(i=0;i<20;i++)

{

delay_ms(200);

LED0=!LED0;

LED1=!LED1;

}

LCD_Clear(WHITE); //清除显示

for(i=0;i<50;i++) //已实现

{

delay_ms(20);

LED1=!LED1;

}

Show_Str(60,32,"2",16,0); //2

LcdShowHz2(00,00); //画横线 已实现

for(i=0;i<20;i++)

{

delay_ms(200);

LED0=!LED0;

LED1=!LED1;

}

LCD_Clear(WHITE); //清除显示

Show_Str(60,32,"3",16,0); //3

LcdShowHz3(00,00); //画横线 已实现

for(i=0;i<20;i++)

{

delay_ms(200);

LED0=!LED0;

LED1=!LED1;

}

}

/***原子开发板LCD显示屏编译测试***********************/

/***汉字显示,画两条横线三条竖线**2018 1 28 PAST******/

/***L85 CODE 4736 *****************************/

#include <stm32f10x_lib.h>

#include "sys.h"

#include "usart.h"

#include "delay.h"

#include "led.h"

#include "lcd.h"

#include "text.h"

/******在x=0~239y=0~319位置连续写点(画直线)横线*****/

void LcdShowHz(u16 x,u16 y)

{

u8 i;

for(i=0;i<100;i++) //已实现

{

delay_ms(100);

LED1=!LED1; //

LCD_DrawPoint(i,0);//如为1在XY地址写显示 画点x=0~239y=0~319

LCD_DrawPoint(i,1);//如为1在XY地址写显示

LCD_DrawPoint(i,2);//如为1在XY地址写显示

LCD_DrawPoint(i,3);//如为1在XY地址写显示

LCD_DrawPoint(i,4);//如为1在XY地址写显示

LCD_DrawPoint(i,y+120);//如为1在XY地址写显示 画点x=0~239y=0~319

LCD_DrawPoint(i,y+121);//如为1在XY地址写显示

LCD_DrawPoint(i,y+122);//如为1在XY地址写显示

LCD_DrawPoint(i,y+123);//如为1在XY地址写显示

LCD_DrawPoint(i,y+124);//如为1在XY地址写显示

}

}

/********************************/

int main(void)

{

u8 i;

Stm32_Clock_Init(9); //系统时钟设置

delay_init(72); //延时初始化

uart_init(72,9600); //串口1初始化

LCD_Init(); //初始化液晶

LED_Init(); //LED初始化

while(1)

{

POINT_COLOR=BLUE;

Show_Str(60,50,"2016 10 5",16,0);

Show_Str(10,70,"蔡沁钰 常州市北实验中学",16,0);

Show_Str(60,90,"八(8)班",16,0);

Show_Str(60,34,"2018 1 28 1",16,0); //显示状态标志1

for(i=0;i<100;i++) //画三条宽度5个点的竖线 已实现

{

POINT_COLOR=BLUE; //设置字体为红色

LCD_DrawPoint(1,i+110); //调用画点子程序

LCD_DrawPoint(2,i+110); //调用画点子程序

LCD_DrawPoint(3,i+110); //调用画点子程序

LCD_DrawPoint(4,i+110); //调用画点子程序

LCD_DrawPoint(5,i+110); //调用画点子程序

LCD_DrawPoint(26,i+110); //调用画点子程序

LCD_DrawPoint(27,i+110); //调用画点子程序

LCD_DrawPoint(28,i+110); //调用画点子程序

LCD_DrawPoint(29,i+110); //调用画点子程序

LCD_DrawPoint(30,i+110); //调用画点子程序

LCD_DrawPoint(46,i+110); //调用画点子程序

LCD_DrawPoint(47,i+110); //调用画点子程序

LCD_DrawPoint(48,i+110); //调用画点子程序

LCD_DrawPoint(49,i+110); //调用画点子程序

LCD_DrawPoint(50,i+110); //调用画点子程序

delay_ms(200);

LED0=!LED0;

}

POINT_COLOR=RED;

Show_Str(60,34,"2018 1 28 2",16,0); //显示状态标志2

LcdShowHz(30,110); //调用画竖线子程序

for(i=0;i<100;i++)

{

delay_ms(200);

LED0=!LED0;

LED1=!LED1;

}

LCD_Clear(WHITE); //清除显示

Show_Str(60,34,"2018 1 28 3",16,0); //显示状态标志3

for(i=0;i<100;i++) //已实现

{

delay_ms(100);

LED1=!LED1;

}

}

}