熱門(mén): 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂(lè)園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
發(fā)布時(shí)間: 2014-10-3 22:12
正文摘要:51單片機(jī)最小系統(tǒng)板 如圖,寫(xiě)入程序后12864液晶無(wú)法顯示,已經(jīng)試過(guò)多次了。。唉。。 付上程序,看看哪時(shí)不行了?? #include "reg52.h" #include "intrins.h" sbit io_LCD12864_RS = P2^ ... |
rst沒(méi)有強(qiáng)制復(fù)位一次 |
dgahz 發(fā)表于 2014-11-5 22:57 你好 我也是這個(gè)程序 出的問(wèn)題 請(qǐng)問(wèn)您改了哪三根控制線? |
wyy450y 發(fā)表于 2014-11-8 21:26 已經(jīng)正常,換個(gè)程序就好了。。呵呵 |
是你接口沒(méi)整清楚吧 |
程序里由很多沒(méi)加分號(hào) |
這個(gè)是我的板子上能正常顯示的程序,你也可以改一下接口或者顯示的字體。 //頭文件: #include <reg52.h> /********IO引腳定義***********************************************************/ sbit LCD_RS=P2^3;//定義引腳 sbit LCD_RW=P2^4; sbit LCD_E=P2^5; sbit PSB =P2^6; //PSB腳為12864-12系列的串、并通訊功能切換,使用8位并行接口,PSB=1 /********宏定義***********************************************************/ #define LCD_Data P0 #define Busy 0x80 //用于檢測(cè)LCD狀態(tài)字中的Busy標(biāo)識(shí) /********函數(shù)聲明*************************************************************/ void WriteDataLCD(unsigned char WDLCD); void WriteCommandLCD(unsigned char WCLCD,BuysC); unsigned char ReadDataLCD(void); unsigned char ReadStatusLCD(void); void LCDInit(void); void LCDClear(void); void LCDFlash(void); void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData); void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData); void Delay5Ms(void); void Delay400Ms(void); /********數(shù)據(jù)定義*************************************************************/ code unsigned char uctech[] = {"5 1 單片機(jī)實(shí)驗(yàn)板"}; code unsigned char net[] = {"lydz8.taobao.com"}; code unsigned char mcu[] = {"自學(xué)單片機(jī)的首選"}; code unsigned char qq[] = {" QQ: 52927029 "}; /***********主函數(shù)開(kāi)始********************************************************/ void main(void) { Delay400Ms(); //啟動(dòng)等待,等LCD講入工作狀態(tài) LCDInit(); //LCM初始化 Delay5Ms(); //延時(shí)片刻(可不要) while(1){ LCDClear(); DisplayListChar(0,1,uctech); //顯示字庫(kù)中的中文數(shù)字 DisplayListChar(0,2,net); //顯示字庫(kù)中的中文數(shù)字 DisplayListChar(0,3,mcu); //顯示字庫(kù)中的中文 DisplayListChar(0,4,qq); //顯示字庫(kù)中的中文數(shù)字 Delay400Ms(); Delay400Ms(); Delay400Ms(); Delay400Ms(); LCDFlash(); //閃爍效果 } } /***********寫(xiě)數(shù)據(jù)********************************************************/ void WriteDataLCD(unsigned char WDLCD) { ReadStatusLCD(); //檢測(cè)忙 LCD_RS = 1; LCD_RW = 0; LCD_Data = WDLCD; LCD_E = 1; LCD_E = 1; LCD_E = 0; } /***********寫(xiě)指令********************************************************/ void WriteCommandLCD(unsigned char WCLCD,BuysC) //BuysC為0時(shí)忽略忙檢測(cè) { if (BuysC) ReadStatusLCD(); //根據(jù)需要檢測(cè)忙 LCD_RS = 0; LCD_RW = 0; LCD_Data = WCLCD; LCD_E = 1; LCD_E = 1; LCD_E = 0; } /***********讀數(shù)據(jù)********************************************************/ unsigned char ReadDataLCD(void) { unsigned char LCDDA; LCD_RS = 1; LCD_RW = 1; LCD_E = 1; LCD_E = 1; LCDDA=LCD_Data; LCD_E = 0; return(LCDDA); } /***********讀狀態(tài)*******************************************************/ unsigned char ReadStatusLCD(void) { LCD_Data = 0xFF; LCD_RS = 0; LCD_RW = 1; LCD_E = 1; LCD_E = 1; while (LCD_Data & Busy); //檢測(cè)忙信號(hào) LCD_E = 0; return(1); } /***********初始化********************************************************/ void LCDInit(void) { WriteCommandLCD(0x30,1); //顯示模式設(shè)置,開(kāi)始要求每次檢測(cè)忙信號(hào) WriteCommandLCD(0x01,1); //顯示清屏 WriteCommandLCD(0x06,1); // 顯示光標(biāo)移動(dòng)設(shè)置 WriteCommandLCD(0x0C,1); // 顯示開(kāi)及光標(biāo)設(shè)置 } /***********清屏********************************************************/ void LCDClear(void) { WriteCommandLCD(0x01,1); //顯示清屏 WriteCommandLCD(0x34,1); // 顯示光標(biāo)移動(dòng)設(shè)置 WriteCommandLCD(0x30,1); // 顯示開(kāi)及光標(biāo)設(shè)置 } /***********閃爍效果********************************************************/ void LCDFlash(void) { WriteCommandLCD(0x08,1); //顯示清屏 Delay400Ms(); WriteCommandLCD(0x0c,1); // 顯示開(kāi)及光標(biāo)設(shè)置 Delay400Ms(); WriteCommandLCD(0x08,1); //顯示清屏 Delay400Ms(); WriteCommandLCD(0x0c,1); // 顯示開(kāi)及光標(biāo)設(shè)置 Delay400Ms(); WriteCommandLCD(0x08,1); //顯示清屏 Delay400Ms(); } /***********按指定位置顯示一個(gè)字符*******************************************/ void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData) { if(Y<1) Y=1; if(Y>4) Y=4; X &= 0x0F; //限制X不能大于16,Y不能大于1 switch(Y){ case 1:X|=0X80;break; case 2:X|=0X90;break; case 3:X|=0X88;break; case 4:X|=0X98;break; } WriteCommandLCD(X, 0); //這里不檢測(cè)忙信號(hào),發(fā)送地址碼 WriteDataLCD(DData); } /***********按指定位置顯示一串字符*****************************************/ void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData) { unsigned char ListLength,X2; ListLength = 0; X2=X; if(Y<1) Y=1; if(Y>4) Y=4; X &= 0x0F; //限制X不能大于16,Y在1-4之內(nèi) switch(Y){ case 1:X2|=0X80;break; //根據(jù)行數(shù)來(lái)選擇相應(yīng)地址 case 2:X2|=0X90;break; case 3:X2|=0X88;break; case 4:X2|=0X98;break; } WriteCommandLCD(X2, 1); //發(fā)送地址碼 while (DData[ListLength]>=0x20){ //若到達(dá)字串尾則退出 if (X <= 0x0F){ //X坐標(biāo)應(yīng)小于0xF WriteDataLCD(DData[ListLength]); ListLength++; X++; Delay5Ms(); } } } /***********短延時(shí)********************************************************/ void Delay5Ms(void) { unsigned int TempCyc = 5552; while(TempCyc--); } /***********長(zhǎng)延時(shí)********************************************************/ void Delay400Ms(void) { unsigned char TempCycA = 5; unsigned int TempCycB; while(TempCycA--){ TempCycB=7269; while(TempCycB--); } } |
能共享一下可用的程序嗎? |
vohang 發(fā)表于 2014-10-9 16:19 我換了其他的程序,,改了接口,現(xiàn)在可以顯示了,,,唉開(kāi)始以為L(zhǎng)CD是壞的。。呵呵 |
剛試了你的程序 也沒(méi)顯示出來(lái) ,我也剛學(xué) 沒(méi)法幫你改呵呵,簡(jiǎn)單的會(huì)改 |
Powered by 單片機(jī)教程網(wǎng)