#include "12864.h" #include "sys.h" #include "delay.h" #include "usart.h" void p_out(void) //把 PB 命 令端口配置成输出 { rs(); wr(); en(); psb(); } void wr_outite_cmd(u8 cmd) //写命 令 { p_out(); data_out(); //把 PB 数据端口配置成输出 rs_out=0; wr_out=0; en_out=0; GPIOB->ODR=((GPIOB->ODR&0X00FF)|(cmd<<8)); delay_ms(10); en_out=1; delay_ms(10); en_out=0; } void wr_outite_data(u8 dat) //写数据 { p_out(); data_out(); rs_out=1; wr_out=0; en_out=0; GPIOB->ODR=((GPIOB->ODR&0X00FF)|(dat<<8)); //把 dat 给 PB 高 八位 delay_ms(10); en_out=1; delay_ms(10); en_out=0; } void LCDClear(void) { wr_outite_cmd(0x01); //显示清屏 delay_ms(5); wr_outite_cmd(0x34); // 显示光标移动设置 delay_ms(5); wr_outite_cmd(0x30); // 显示开及光标设置 delay_ms(5); } void locate_x_y(u8 x,u8 y)//指定显示坐标 { u8 x2=0; x2=x; if(y<1) y=1; if(y>4) y=4; x&=0x0f; switch(y) { case 1:x2|=0x80;break; case 2:x2|=0x90;break; case 3:x2|=0x88;break; case 4:x2|=0x98;break; } wr_outite_cmd(x2); delay_ms(10); } void lcd_init(void) { wr_outite_cmd(0x30); delay_ms(10); wr_outite_cmd(0x01); delay_ms(10); wr_outite_cmd(0x06); delay_ms(10); wr_outite_cmd(0x0c); delay_ms(10); } void DisInt(u8 x,u8 y,int fnum) //显 示 整 型 变 量 的 函 数 ,最 多 显 示 16 位 的 整 数 。只能显 示 正数 。 { u8 temp[17]={0}; u8 str[17]={0}; int i=0,j=0; int num = fnum; while(num > 0) //这里不能用 num%10 != 0,如果 num 是 10 的 整 数倍, //例如,100,这样就会出错,根本就不能进入循环体。 { temp[i] =(num%10)+0x30; num/=10; i++; } i--; //因 为 i 在 退 出 循 环 之 前 还 自 加 了 一 次 , 此 时 , //指 向 最 后 一 个 存 储 有 用 值 的 元 素 的 后 一 个 位 置 。 while(i > -1) //因 为 i=0 时 , temp[0]还 是有 用 值 。 { str[j] = temp[i]; j++; i--; } str[j]='\0'; //因 为 i 在 退 出 循 环 之 前 还 自 加 了...