lcd12864(st7920)串行驱动程序

上传人:第*** 文档编号:34614400 上传时间:2018-02-26 格式:DOC 页数:38 大小:360KB
返回 下载 相关 举报
lcd12864(st7920)串行驱动程序_第1页
第1页 / 共38页
lcd12864(st7920)串行驱动程序_第2页
第2页 / 共38页
lcd12864(st7920)串行驱动程序_第3页
第3页 / 共38页
lcd12864(st7920)串行驱动程序_第4页
第4页 / 共38页
lcd12864(st7920)串行驱动程序_第5页
第5页 / 共38页
点击查看更多>>
资源描述

《lcd12864(st7920)串行驱动程序》由会员分享,可在线阅读,更多相关《lcd12864(st7920)串行驱动程序(38页珍藏版)》请在金锄头文库上搜索。

1、完整功能版的 ST7920驱动的12864液晶(并行驱动),MCU=Mega16 2007-07-04 23:40:11| 分类: AVR 单片机 | 标签:avr |字号大中小 订阅/*工 程:ST7920驱动的12864液晶的并行驱动模式创建日期:2007年7月3 日创 建 人:朱海峰邮 箱: QQ:543376422引脚定义:RS(CS)=PB0RW(SID)=PB1EN(SCLK)=PB2D0=PA0:D7=PA7PSB 为硬件控制,接高电平为8 位或4位的并行模式,接低电平为串行模式*/#include #include #define uint8_t unsigned char#d

2、efine uint16_t unsigned int#define nop() NOP()#define DATA_PORT PORTA#define Set_RS() DDRB |= (1* QQ:282074921* Date:2007-11-18*/#ifndef _LZP_START51_12864LCDS_H#define _LZP_START51_12864LCDS_H#include reg52.h/12864 串行口定义sbit LCD_CS=P23;sbit LCD_CLK=P25;sbit LCD_SID=P24;/12864LCD 指令定义#define CMD_CLE

3、AR 0x01#define CMD_RESET 0x02/设置波特率#define OSC_FREQ 11059200L#define BAUD_115200 256 - (OSC_FREQ/192L)/115200L / 255#define BAUD_57600 256 - (OSC_FREQ/192L)/57600L / 254#define BAUD_38400 256 - (OSC_FREQ/192L)/38400L / 253#define BAUD_28800 256 - (OSC_FREQ/192L)/28800L / 252#define BAUD_19200 256 -

4、(OSC_FREQ/192L)/19200L / 250#define BAUD_14400 256 - (OSC_FREQ/192L)/14400L / 248#define BAUD_9600 256 - (OSC_FREQ/192L)/9600L / 244void Delay_us(unsigned char nUs);void Delay_ms(unsigned int nMs);bit lcd_busy(void);void write_command(unsigned char cmd);unsigned char read_data(void);void write_data(

5、unsigned char dat);void clear_lcd();void lcd_init();void lcd_setxy(unsigned char x,unsigned char y);void lcd_display_str(unsigned char x, unsigned char y,unsigned char *str);#endif我的是 ST7920 控制的.接了 RS(CS),与 WR(SID)两个至单片机,节约了串口.另外 PSB(串行为 0,并行接 1)跟 LED-接 GND,RS 与 LED+接 VCC.这个程序可能还有点问题,接上背光(LED+,LED-)

6、显示就不很清晰了,关了之后很清晰.显示最后三个汉字李正平 错误 ,为李掌可笑.查查程序哪里有问题了/FileName:12864lcds.c/* start51 study board test software* test 12864LCD* using serial interface* author:bluehacker* QQ:282074921* Date:2007-11-18*/#include 12864.hvoid Delay_us(unsigned char nUs)unsigned char i;while(nUs-)for(i=0;i10;i+);void Delay_m

7、s(unsigned int nMs) unsigned char i;while(nMs-)for(i=0;i120;i+);bit lcd_busy()unsigned char i;bit dat;/先产生连续 5 个1LCD_CS=1;for(i=0;i5;i+)LCD_CLK=0;LCD_SID=1;LCD_CLK=1;/再发送一个1,表示读操作LCD_CLK=0;LCD_SID=1;LCD_CLK=1;/再发送一个0,表示写命令操作LCD_CLK=0;LCD_SID=0;LCD_CLK=1;/再发送一个0,这是表示第一个字节结束LCD_CLK=0;LCD_SID=0;LCD_CLK

8、=1;/Delay_us(1);dat=0;LCD_CLK=0;dat=LCD_SID;LCD_CLK=1;LCD_CS=0;return dat; void write_command(unsigned char cmd)unsigned char i;while(lcd_busy();/先产生连续 5 个1LCD_CS=1;for(i=0;i5;i+)LCD_CLK=0;LCD_SID=1;LCD_CLK=1;/再发送一个0,表示写操作LCD_CLK=0;LCD_SID=0;LCD_CLK=1;/再发送一个0,表示写命令操作LCD_CLK=0;LCD_SID=0;LCD_CLK=1;/再发

9、送一个0,这是表示第一个字节结束LCD_CLK=0;LCD_SID=0;LCD_CLK=1;/下面发送具体指令,先发送高 4 位for(i=0;i4;i+)LCD_CLK=0;if(cmd&0x80)LCD_SID=1;elseLCD_SID=0;LCD_CLK=1;cmd=1;/发送连续 4 个0for(i=0;i4;i+)LCD_CLK=0;LCD_SID=0;LCD_CLK=1;/下面发送指令的低 4 位for(i=0;i4;i+) LCD_CLK=0;if(cmd&0x80)LCD_SID=1;elseLCD_SID=0;LCD_CLK=1;cmd=1;/发送连续 4 个0for(i=

10、0;i4;i+)LCD_CLK=0;LCD_SID=0;LCD_CLK=1;LCD_CS=0;/结束void write_data(unsigned char dat)unsigned char i;while(lcd_busy();/先产生连续 5 个1LCD_CS=1;for(i=0;i5;i+)LCD_CLK=0;LCD_SID=1;LCD_CLK=1;/再发送一个0,表示写操作LCD_CLK=0;LCD_SID=0;LCD_CLK=1;/再发送一个1,表示写数据操作LCD_CLK=0;LCD_SID=1;LCD_CLK=1;/再发送一个0,这是表示第一个字节结束LCD_CLK=0;LC

11、D_SID=0;LCD_CLK=1; /下面发送具体数据,先发送高 4 位for(i=0;i4;i+)LCD_CLK=0;if(dat&0x80)LCD_SID=1;elseLCD_SID=0;LCD_CLK=1;dat=1;/发送连续 4 个0for(i=0;i4;i+)LCD_CLK=0;LCD_SID=0;LCD_CLK=1;/下面发送数据的低 4 位for(i=0;i4;i+)LCD_CLK=0;if(dat&0x80)LCD_SID=1;elseLCD_SID=0;LCD_CLK=1;dat=1;/发送连续 4 个0for(i=0;i4;i+)LCD_CLK=0;LCD_SID=0;

12、LCD_CLK=1;LCD_CS=0;/结束 unsigned char read_data()unsigned char i,dat;while(lcd_busy(); /先产生连续 5 个1LCD_CS=1;for(i=0;i5;i+)LCD_CLK=0;LCD_SID=1;LCD_CLK=1;/再发送一个1,表示读操作LCD_CLK=0;LCD_SID=0;LCD_CLK=1;/再发送一个1,表示数据操作LCD_CLK=0;LCD_SID=1;LCD_CLK=1;/再发送一个0,这是表示第一个字节结束LCD_CLK=0;LCD_SID=0;LCD_CLK=1; /下面读具体数据/先读高

13、4 位dat=0;for(i=0;i4;i+)LCD_CLK=0;dat=1;LCD_CLK=1;dat|=LCD_SID;/再接受 4 个连续0,没什么意义,直接丢掉for(i=0;i4;i+)LCD_CLK=0;Delay_us(1);LCD_CLK=1;Delay_us(1);/接受低 4 位for(i=0;i4;i+)LCD_CLK=0;dat=1; LCD_CLK=1;dat|=LCD_SID;/再接受 4 个连续0,没什么意义,直接丢掉for(i=0;i4;i+)LCD_CLK=0;Delay_us(1);LCD_CLK=1;Delay_us(1);LCD_CS=0;return

14、dat;void clear_lcd()write_command(CMD_CLEAR);void lcd_setxy(unsigned char x,unsigned char y)unsigned char addr;switch(y)case 0:addr=0x80+x;break;case 1:addr=0x90+x;break;case 2:addr=0x88+x;break;case 3:addr=0x98+x;break;write_command(addr);void lcd_display_str(unsigned char x, unsigned char y,unsigned char *str) unsigned char i;lcd_setxy(x,y);for(i=0;stri!=0;i+)write_da

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号