熱門: 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
發(fā)布時(shí)間: 2020-3-18 20:36
正文摘要:如圖,K和M之間會(huì)空格,這樣就不夠顯示了啊,導(dǎo)致后面都不能正常顯示了,請(qǐng)問這怎么解決呢? |
unsigned char code AC_TABLE[]={ //坐標(biāo)編碼 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++; } } } |
你這個(gè)k和m是用的帶字庫12864字符表里面的特殊字符吧,占用兩個(gè)字節(jié)。直接輸出字符串,漢字占用兩個(gè)字節(jié),字母和數(shù)字只占用一個(gè)字節(jié)。 |
代碼: #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延時(shí)函數(shù) { u16 i; for(i = 0; i < ms; i++){; } } void Init_LCD(void) //初始化LCD控制端口函數(shù) { LCD_RS=1; //輸出數(shù)據(jù)LCD_RS和LCD_EN清零 LCD_RW=0; LCD_EN=0; } void LCD_write_cmd(u8 cmd) //LCD12864寫指令函數(shù) { LCD_EN=0; LCD_RS=0; //寫指令 LCD_RW=0; //寫入 P2=cmd;//賦值給D0-D7對(duì)應(yīng)的IO引腳 delayms(50); LCD_EN=1; //允許 delayms(50); LCD_EN=0; } void LCD_write_data(u8 dat) //LCD12864寫數(shù)據(jù)函數(shù) { LCD_EN=0; LCD_RS=1; //寫數(shù)據(jù) LCD_RW=0; //寫入 P2=dat;//賦值給D0-D7對(duì)應(yīng)的IO引腳 delayms(50); LCD_EN=1; //允許 delayms(50); LCD_EN=0; } void LCD_init(void) //初始化LCD12864顯示設(shè)置函數(shù) { delayms(10000); LCD_write_cmd(0x30); delayms(20); LCD_write_cmd(0x30);//功能設(shè)置 delayms(20); LCD_write_cmd(0x0c);//顯示開關(guān)控制 delayms(20); LCD_write_cmd(0x01);//顯示清除 delayms(1200); LCD_write_cmd(0x06);//顯示清除 delayms(50); } void LCD_Display() //LCD顯示函數(shù) { Init_LCD(); //初始化LCD控制端口 LCD_init(); //初始化LCD顯示設(shè)置 LCD_write_cmd(0x80); //第一行數(shù)據(jù)指針地址 //-------------第一行顯示內(nèi)容-------------// 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'); //速度個(gè)位 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() //主函數(shù) { TMOD = 0x01; //設(shè)置定時(shí)器1工作方式2,定時(shí)器工作方式3 TH0 = (65536-922)/256; //高8位設(shè)初值1ms TL0 = (65536-922)%256; //低8位設(shè)初值1ms EA = 1; //開總中斷 ET0 = 1; //開T1定時(shí)器0中斷 TR0 = 1; //開定時(shí)器0 while(1) { v = (s/cnt1*10)*3600; //計(jì)算速度,單位km/h LCD_Display(); //LCD12864進(jìn)行顯示 } } void EX0_INT(void) interrupt 1 //計(jì)數(shù)中斷 { TL0 = (65536-922)%256; //重裝初值1ms TH0 = (65536-922)/256; cnt2++; if(hall == 0) { cnt1++; //記錄1ms的次數(shù) } else { cnt1 = 0; //清空計(jì)數(shù)次數(shù) } } |
Powered by 單片機(jī)教程網(wǎng)