基于STC12C5A56S2单片机和12864字符液晶,串口程序
其实对于用过74HC595(移位寄存器)的朋友,串口方式操作12864是很容易的,这个程序已在硬件上调试通过了,显示很稳定! 同时在此感谢亲爱的,一直陪着我,默默支持我
#include< STC_NEW_8051.H> #define uint8 unsigned char #define uint16 unsigned int sbit SCLK = P0^7; //时钟 sbit SID = P0^6; //串行数据 sbit CS = P0^5; //串行片选信号 sbit CS1 = P4^6; //PSB并串行接口选择,H——并行,L——串行 /***************************************/ /*函数名:Delay */ /*功能:延时 */ /*参数:us---延时的微秒数 */ /* ms---延时的毫秒数 */ /*返回值:无 */ /***************************************/ 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++); } /****************************************/ /*函数名:Lcd_w_bit */ /*功能:向lcd发送一个字节数据 */ /*参数:byte———要发送的数据 */ /*返回值:无 */ /****************************************/ void Lcd_w_bit(uint8 byte) { uint8 i; for(i = 0;i < 8;i ++) //循环8次发送一个字节 { SID = byte&0x80; //取byte最高位 SCLK = 1; Delayus(1); //等待端口变化 SCLK = 0; //下降沿读入数据 byte = byte<<1; //byte左移一位 } } /****************************************/ /*函数名:Lcd_w_char() */ /*功能:发送指令/数据 */ /*参数:Nf--1,0标志位,Data--发送的数据 */ /*返回值:无 */ /****************************************/ void Lcd_w_char(uint8 Nf, uint8 Data) { uint8 Init_char,Hdata,Ldata; //定义起始选择信号,数据/指令的高和低4位 if(Nf == 0) //Nf=0,则写入的是控制指令 { Init_char = 0xf8; //A=0,MCU->LCD;B=0,控制指令;C=0 } else //Nf=1,则写入的是显示数据 { Init_char = 0xfa; //A=0,MCU->LCD;B=1,显示数据;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; } /****************************************/ /*函数名:Lcd_w_word() */ /*功能:发送字符串 */ /*参数:str--要写入显示的字符串 */ /*返回值:无 */ /****************************************/ void Lcd_w_word(uint8 *str) { while(*str!='\0') { Lcd_w_char(1,*str++); } *str = 0; } /****************************************/ /*函数名:Lcd_init */ /*功能:lcd初始化 */ /*参数:无 */ /*返回值:无 */ /****************************************/ void Lcd_init() { Delayms(50); //启动等待LCD进入工作模式 CS1 = 0; //串行工作模式 CS = 1; //片选 Lcd_w_char(0,0x01); //清屏 Delayms(1); Lcd_w_char(0,0x06); //DDRAM地址计数器(AC)归零 Delayms(2); Lcd_w_char(0,0x30); //8 位界面,基本指令集,绘图显示关 Delayms(1); Lcd_w_char(0,0x0c); //显示打开,光标关,反白关 Delayms(5); } /***************************************/ /*函数名:MCU_init */ /*功能:MCU初始化 */ /*参数:无 */ /*返回值:无 */ /***************************************/ void Mcu_init() { P0M1 = 0x00; P0M0 = 0x00; P4M1 = 0x00; P4M0 = 0X00; } /***************************************/ /*函数名:main函数 */ /*功能:main */ /*参数:无 */ /*返回值:无 */ /***************************************/ 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("远"); Delayms(600); Lcd_w_char(0,0x9f); Lcd_w_word("!"); Delayms(600); } }