欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
帶字庫的12864顯示字母中間為什么會空一個再顯示?怎么解決呢?
[打印本頁]
作者:
孤雪
時間:
2020-3-18 20:36
標題:
帶字庫的12864顯示字母中間為什么會空一個再顯示?怎么解決呢?
如圖,K和M之間會空格,這樣就不夠顯示了啊,導致后面都不能正常顯示了,請問這怎么解決呢?
IMG_20200318_191224.jpg
(1.61 MB, 下載次數: 40)
下載附件
2020-3-18 19:40 上傳
作者:
孤雪
時間:
2020-3-18 22:48
代碼:
#include <reg52.h>
#include <intrins.h>typedef unsigned char u8;
typedef unsigned int u16;
sbit LCD_RS = P3^6; //定義LCD12864使用的IO口
sbit LCD_RW = P3^7;
sbit LCD_EN = P3^4;
sbit hall = P1^5;u16 v; //速度
u16 km; //里程
u16 re; //熱量
u16 k; //霍爾電平
u8 cnt1;
u8 cnt2;
u8 time[3];
u8 s = 207; //車輪周長
void delayms(u16 ms) //LCD12864延時函數
{
u16 i;
for(i = 0; i < ms; i++){; }
}
void Init_LCD(void) //初始化LCD控制端口函數
{
LCD_RS=1; //輸出數據LCD_RS和LCD_EN清零
LCD_RW=0;
LCD_EN=0;
}
void LCD_write_cmd(u8 cmd) //LCD12864寫指令函數
{
LCD_EN=0;
LCD_RS=0; //寫指令
LCD_RW=0; //寫入
P2=cmd;//賦值給D0-D7對應的IO引腳
delayms(50);
LCD_EN=1; //允許
delayms(50);
LCD_EN=0;
}
void LCD_write_data(u8 dat) //LCD12864寫數據函數
{
LCD_EN=0;
LCD_RS=1; //寫數據
LCD_RW=0; //寫入
P2=dat;//賦值給D0-D7對應的IO引腳
delayms(50);
LCD_EN=1; //允許
delayms(50);
LCD_EN=0;
}
void LCD_init(void) //初始化LCD12864顯示設置函數
{
delayms(10000);
LCD_write_cmd(0x30);
delayms(20);
LCD_write_cmd(0x30);//功能設置
delayms(20);
LCD_write_cmd(0x0c);//顯示開關控制
delayms(20);
LCD_write_cmd(0x01);//顯示清除
delayms(1200);
LCD_write_cmd(0x06);//顯示清除
delayms(50);
}
void LCD_Display() //LCD顯示函數
{
Init_LCD(); //初始化LCD控制端口
LCD_init(); //初始化LCD顯示設置
LCD_write_cmd(0x80); //第一行數據指針地址
//-------------第一行顯示內容-------------//
LCD_write_data(0xCB); //速
LCD_write_data(0xD9);
LCD_write_data(0xB6); //度
LCD_write_data(0xC8);
LCD_write_data(0xA1); //:
LCD_write_data(0xC3);
LCD_write_data(v/10%10+'0'); //速度十位
LCD_write_data(v%10+'0'); //速度個位
LCD_write_data(0xA3); //.
LCD_write_data(0xAE);
LCD_write_data(v*10%10+'0'); //速度十分位
LCD_write_data(0xA3); //k
LCD_write_data(0xEB);
LCD_write_data(0xA3); //m
LCD_write_data(0xED);
LCD_write_data(0xA3); ///
LCD_write_data(0xAF);
LCD_write_data(0xA3); //h
LCD_write_data(0xA8);
delayms(10);
}
void main() //主函數
{
TMOD = 0x01; //設置定時器1工作方式2,定時器工作方式3
TH0 = (65536-922)/256; //高8位設初值1ms
TL0 = (65536-922)%256; //低8位設初值1ms
EA = 1; //開總中斷
ET0 = 1; //開T1定時器0中斷
TR0 = 1; //開定時器0
while(1)
{
v = (s/cnt1*10)*3600; //計算速度,單位km/h
LCD_Display(); //LCD12864進行顯示
}
}
void EX0_INT(void) interrupt 1 //計數中斷
{
TL0 = (65536-922)%256; //重裝初值1ms
TH0 = (65536-922)/256;
cnt2++;
if(hall == 0)
{
cnt1++; //記錄1ms的次數
}
else
{
cnt1 = 0; //清空計數次數
}
}
作者:
xxpp2011
時間:
2020-3-18 23:41
你這個k和m是用的帶字庫12864字符表里面的特殊字符吧,占用兩個字節。直接輸出字符串,漢字占用兩個字節,字母和數字只占用一個字節。
作者:
xxpp2011
時間:
2020-3-19 11:01
unsigned char code AC_TABLE[]={ //坐標編碼
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,
0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,
0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,
};
/************************************************************************************
顯示字符串
************************************************************************************/
void PutStr(unsigned char row,unsigned char col,unsigned char *puts)
{
LCD_write_cmd(0x30);
LCD_write_cmd(AC_TABLE[8*row+col]);
while(*puts != '\0')
{
if(col==8)
{
col=0;
row++;
}
if(row==4) row=0;
LCD_write_cmd(AC_TABLE[8*row+col]);
LCD_write_data(*puts);
puts++;
if(*puts != '\0')
{
LCD_write_data(*puts);
puts++;
col++;
}
}
}
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1