历史上的今天
今天是:2024年10月19日(星期六)
2019年10月19日 | 硬件之路-串行LCD12864之MSP430简单实现
2019-10-19 来源:eefocus
串行LCD12864引脚接法:

180144_s4QJ_1413857.jpg?imageView2/2/w/550
实现代码(MSP430):
/*
* 12864.c
* Created on: 2014-7-15
* Author: bazingagain
*/
#include #include "12864.h" /** * 函数名:delay * 功能:延时函数,延时时间为100us * x * 参数:x * 返回值:无 */ void delay(uint x) { uint i,j; for(j=0;j } /** * 函数名:sendByte * 功能:向LCD12864串行发送1BYET数据 * 参数:command * 返回值:无 */ void sendByte(uchar command) { uchar i; for(i=0;i<8;i++) { if((command< { P2OUT |= BIT1; //sid=1; } else { P2OUT &= (~BIT1); //sid=0; } P2OUT &= (~BIT2); //SCLK=0 P2OUT |= BIT2; //SCLK=1 } } /** * 函数名:writeCom * 功能:向LCD1264写指令函数 * 参数:command * 返回值:无 */ void writeCom(unsigned char command) { // P2OUT |= BIT0; //CS =P20 CS=1 sendByte(0xf8); //传送指令 sendByte(command & 0xf0); sendByte((command << 4) & 0xf0); delay(2); } /** * 函数名:writeData * 功能:向LCD1286写数据函数 * 参数:data * 返回值:无 */ void writeData(unsigned char data) { // P2OUT |= BIT0; //CS=1; sendByte(0xfa); sendByte(data & 0xf0); sendByte((data << 4) & 0xf0); delay(2); } /** * 函数名:lcd_init * 功能:初始化LCD12864函数 * 参数:无 * 返回值:无 */ void lcd_init(void) { P2DIR |= BIT1 + BIT2; //SID , SCLK /*delay(20000); writeCom(0x30); //设置8位数据接口,基本指令模式 delay(50); writeCom(0x0c); //整体显示开,游标关,反白关 delay(50);*/ writeCom(0x30); //设置8位数据接口,基本指令模式 writeCom(0x20); //清DDRAM writeCom(0x06); //游标及显示右移一位 writeCom(0x0c); //整体显示开,游标关,反白关 writeCom(0x01); //写入空格清屏 writeCom(0x80); //设置首次显示位置 } /** * 函数名:displayOn12864 * 功能:LCD12864显示字符函数 * 参数:*s, addr * 返回值:无 */ void displayOn12864(char *s, unsigned char addr) { writeCom(addr); while(*s>0) { writeData(*s); s++; delay(50); } } 51 mcu 写法: #include /* * 12864.c * Created on: 2015-3-31 * Author: bazingagain */ #include "12864.h" sbit RW = P1^0; sbit EN = P1^1; /** * 函数名:delay * 功能:延时函数,延时时间为100us * x * 参数:x * 返回值:无 */ void delay(uint x) { uint i,j; for(j=0;j } /** * 函数名:sendByte * 功能:向LCD12864串行发送1BYET数据 * 参数:command * 返回值:无 */ void sendByte(uchar command) { uchar i; for(i=0;i<8;i++) { if((command< { RW = 1; //sid=1; } else { RW = 0; //sid=0; } EN = 0; //SCLK=0 EN = 1; //SCLK=1 } } /** * 函数名:writeCom * 功能:向LCD1264写指令函数 * 参数:command * 返回值:无 */ void writeCom(unsigned char command) { RW = 1; sendByte(0xf8); //传送指令 sendByte(command & 0xf0); sendByte((command << 4) & 0xf0); delay(2); } /** * 函数名:writeData * 功能:向LCD1286写数据函数 * 参数:data * 返回值:无 */ void writeData(unsigned char ddata) { RW = 1; sendByte(0xfa); sendByte(ddata & 0xf0); sendByte((ddata << 4) & 0xf0); delay(2); } /** * 函数名:lcd_init * 功能:初始化LCD12864函数 * 参数:无 * 返回值:无 */ void lcd_init(void) { /*delay(20000); writeCom(0x30); //设置8位数据接口,基本指令模式 delay(50); writeCom(0x0c); //整体显示开,游标关,反白关 delay(50);*/ writeCom(0x30); //设置8位数据接口,基本指令模式 writeCom(0x20); //清DDRAM writeCom(0x06); //游标及显示右移一位 writeCom(0x0c); //整体显示开,游标关,反白关 writeCom(0x01); //写入空格清屏 writeCom(0x80); //设置首次显示位置 } /** * 函数名:displayOn12864 * 功能:LCD12864显示字符函数 * 参数:*s, addr * 返回值:无 */ void displayOn12864(char *s, unsigned char addr) { writeCom(addr); while(*s>0) { writeData(*s); s++; delay(50); } }
史海拾趣
|
在CE6.0下,用6410平台去实现KITL功能怎么老是成功不了?三星手册是已经实现了的. 在CE6.0下,用6410平台去实现KITL功能怎么老是成功不了?三星手册是已经实现了的.… 查看全部问答> |
|
我是一个初学者,计划学习的是基于ARM处理器的嵌入式开发,具体做一个GPS导航系统 现在是有ARM9实验箱。 现在刚刚学习,有些迷茫,现阶段是不是要详细理解s3c2410处理器的各个架构,然后再学习OS呢? 如何进行系统的学习呢? 请高手给予指点, ...… 查看全部问答> |
|
请高手解决 RS485 通信问题,一台主机,两台从机,用作动作控制和数据获取。 开发平台都是 C8051F020, KEIL C,点对点通信均正常,联合调试动作几次后通信故障,不能从从设备获取数据。请有 RS485 网通信开发的技术人员帮助解决问题;有意者请于201 ...… 查看全部问答> |




