基于STC12C5A56S2單片機(jī)和12864字符液晶,串口程序
其實(shí)對于用過74HC595(移位寄存器)的朋友,串口方式操作12864是很容易的,這個程序已在硬件上調(diào)試通過了,顯示很穩(wěn)定! 同時在此感謝親愛的,一直陪著我,默默支持我
#include< STC_NEW_8051.H> #define uint8 unsigned char #define uint16 unsigned int sbit SCLK = P0^7; //時鐘 sbit SID = P0^6; //串行數(shù)據(jù) sbit CS = P0^5; //串行片選信號 sbit CS1 = P4^6; //PSB并串行接口選擇,H——并行,L——串行 /***************************************/ /*函數(shù)名:Delay */ /*功能:延時 */ /*參數(shù):us---延時的微秒數(shù) */ /* ms---延時的毫秒數(shù) */ /*返回值:無 */ /***************************************/ void Delayus(uint8 us) { uint8 i; for(i = 0;i <= us*3; i ++); } void Delayms(uint8 ms) { uint16 i,j; for(i = 0;i < 2629; i++) for(j = 0;j < ms; j++); } /****************************************/ /*函數(shù)名:Lcd_w_bit */ /*功能:向lcd發(fā)送一個字節(jié)數(shù)據(jù) */ /*參數(shù):byte———要發(fā)送的數(shù)據(jù) */ /*返回值:無 */ /****************************************/ void Lcd_w_bit(uint8 byte) { uint8 i; for(i = 0;i < 8;i ++) //循環(huán)8次發(fā)送一個字節(jié) { SID = byte&0x80; //取byte最高位 SCLK = 1; Delayus(1); //等待端口變化 SCLK = 0; //下降沿讀入數(shù)據(jù) byte = byte<<1; //byte左移一位 } } /****************************************/ /*函數(shù)名:Lcd_w_char() */ /*功能:發(fā)送指令/數(shù)據(jù) */ /*參數(shù):Nf--1,0標(biāo)志位,Data--發(fā)送的數(shù)據(jù) */ /*返回值:無 */ /****************************************/ void Lcd_w_char(uint8 Nf, uint8 Data) { uint8 Init_char,Hdata,Ldata; //定義起始選擇信號,數(shù)據(jù)/指令的高和低4位 if(Nf == 0) //Nf=0,則寫入的是控制指令 { Init_char = 0xf8; //A=0,MCU->LCD;B=0,控制指令;C=0 } else //Nf=1,則寫入的是顯示數(shù)據(jù) { Init_char = 0xfa; //A=0,MCU->LCD;B=1,顯示數(shù)據(jù);C=0 } Hdata = Data&0xf0; //取Data高四位 Ldata = (Data<<4)&0xf0; //取Data低四位 CS = 0; Delayus(4); CS = 1; Delayus(4); Lcd_w_bit(Init_char); //寫入起始選擇信號 Delayus(5); Lcd_w_bit(Hdata); //寫入Data高四位 Delayus(5); Lcd_w_bit(Ldata); //寫入Data低四位 Delayus(5); CS = 0; } /****************************************/ /*函數(shù)名:Lcd_w_word() */ /*功能:發(fā)送字符串 */ /*參數(shù):str--要寫入顯示的字符串 */ /*返回值:無 */ /****************************************/ void Lcd_w_word(uint8 *str) { while(*str!='\0') { Lcd_w_char(1,*str++); } *str = 0; } /****************************************/ /*函數(shù)名:Lcd_init */ /*功能:lcd初始化 */ /*參數(shù):無 */ /*返回值:無 */ /****************************************/ void Lcd_init() { Delayms(50); //啟動等待LCD進(jìn)入工作模式 CS1 = 0; //串行工作模式 CS = 1; //片選 Lcd_w_char(0,0x01); //清屏 Delayms(1); Lcd_w_char(0,0x06); //DDRAM地址計(jì)數(shù)器(AC)歸零 Delayms(2); Lcd_w_char(0,0x30); //8 位界面,基本指令集,繪圖顯示關(guān) Delayms(1); Lcd_w_char(0,0x0c); //顯示打開,光標(biāo)關(guān),反白關(guān) Delayms(5); } /***************************************/ /*函數(shù)名:MCU_init */ /*功能:MCU初始化 */ /*參數(shù):無 */ /*返回值:無 */ /***************************************/ void Mcu_init() { P0M1 = 0x00; P0M0 = 0x00; P4M1 = 0x00; P4M0 = 0X00; } /***************************************/ /*函數(shù)名:main函數(shù) */ /*功能:main */ /*參數(shù):無 */ /*返回值:無 */ /***************************************/ void main(void) { Mcu_init(); Lcd_init(); while(1) { Lcd_w_char(0,0x80); Lcd_w_word("Fo"); Delayms(600); Lcd_w_char(0,0x81); Lcd_w_word("re"); Delayms(600); Lcd_w_char(0,0x82); Lcd_w_word("ve"); Delayms(600); Lcd_w_char(0,0x83); Lcd_w_word("r "); Delayms(600); Lcd_w_char(0,0x84); Lcd_w_word("lo"); Delayms(600); Lcd_w_char(0,0x85); Lcd_w_word("ve"); Delayms(600); Lcd_w_char(0,0x86); Lcd_w_word("親"); Delayms(600); Lcd_w_char(0,0x90); Lcd_w_word("親"); Delayms(600); Lcd_w_char(0,0x91); Lcd_w_word(","); Delayms(600); Lcd_w_char(0,0x92); Lcd_w_word("謝"); Delayms(600); Lcd_w_char(0,0x93); Lcd_w_word("謝"); Delayms(600); Lcd_w_char(0,0x94); Lcd_w_word("你"); Delayms(600); Lcd_w_char(0,0x95); Lcd_w_word("陪"); Delayms(600); Lcd_w_char(0,0x96); Lcd_w_word("在"); Delayms(600); Lcd_w_char(0,0x97); Lcd_w_word("我"); Delayms(600); Lcd_w_char(0,0x88); Lcd_w_word("身"); Delayms(600); Lcd_w_char(0,0x89); Lcd_w_word("邊"); Delayms(600); Lcd_w_char(0,0x8a); Lcd_w_word(","); Delayms(600); Lcd_w_char(0,0x8b); Lcd_w_word("愿"); Delayms(600); Lcd_w_char(0,0x8c); Lcd_w_word("我"); Delayms(600); Lcd_w_char(0,0x8d); Lcd_w_word("們"); Delayms(600); Lcd_w_char(0,0x8e); Lcd_w_word("就"); Delayms(600); Lcd_w_char(0,0x8f); Lcd_w_word("這"); Delayms(600); Lcd_w_char(0,0x98); Lcd_w_word("樣"); Delayms(600); Lcd_w_char(0,0x99); Lcd_w_word("幸"); Delayms(600); Lcd_w_char(0,0x9a); Lcd_w_word("福"); Delayms(600); Lcd_w_char(0,0x9b); Lcd_w_word("的"); Delayms(600); Lcd_w_char(0,0x9c); Lcd_w_word("到"); Delayms(600); Lcd_w_char(0,0x9d); Lcd_w_word("永"); Delayms(600); Lcd_w_char(0,0x9e); Lcd_w_word("遠(yuǎn)"); Delayms(600); Lcd_w_char(0,0x9f); Lcd_w_word("!"); Delayms(600); } }