树莓派驱动LCD12864(st7920控制器)
来源:互联网 发布:linux cmd命令 编辑:程序博客网 时间:2024/04/27 19:15
- /*
- 运行:sudo ./12864 [字符]
- 编译:gcc 12864.c -o 12864 -L lib -l wiringPi (需已安装wiringPi)
- by:WuSiYu
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <stdint.h>
- #include <wiringPi.h>
- #include <iconv.h>
- #define LCD_RS 4 //显示屏控制线
- #define LCD_RW 5
- #define LCD_EN 1
- #define D1 30 //显示屏数据线
- #define D2 21
- #define D3 22
- #define D4 23
- #define D5 24
- #define D6 25
- #define D7 26
- #define D8 27
- char u2g_out[255];
- /*===================================================================
- 功能:编码转换
- 输入:UTF8
- 输出:GB2312
- ====================================================================*/
- int code_convert(char*from_charset,char*to_charset,char*inbuf,int inlen,char*outbuf,int outlen){
- iconv_t cd;
- int rc;
- char**pin=&inbuf;
- char**pout=&outbuf;
- cd = iconv_open(to_charset,from_charset);
- if(cd==0)return-1;
- memset(outbuf,0,outlen);
- if(iconv(cd,pin,&inlen,pout,&outlen)==-1)return-1;
- iconv_close(cd);
- return0;
- }
- int u2g(char*inbuf,int inlen,char*outbuf,int outlen){
- return code_convert("utf-8","gb2312",inbuf,inlen,outbuf,outlen);
- }
- /*===================================================================
- 功能:总线写入
- 输入:十六进制数据
- 输出:无
- ====================================================================*/
- void bus_write(unsignedchar data){
- int t[10];
- int f=0,i=0,d=data;
- //进制转换
- for(i=0;i<8;i++){
- t[i]=data%2;
- data=data/2;
- }
- //输出
- digitalWrite(D1,t[0]);
- digitalWrite(D2,t[1]);
- digitalWrite(D3,t[2]);
- digitalWrite(D4,t[3]);
- digitalWrite(D5,t[4]);
- digitalWrite(D6,t[5]);
- digitalWrite(D7,t[6]);
- digitalWrite(D8,t[7]);
- }
- /*===================================================================
- 功能:检查LCD忙状态
- 输入:无
- 输出:lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。
- ====================================================================*/
- void chk_busy(){//检查忙位
- digitalWrite(LCD_RS,0);
- digitalWrite(LCD_RW,1);
- digitalWrite(LCD_EN,1);
- bus_write(0xff);
- pinMode(D8, INPUT);
- while(digitalRead(D8));
- pinMode(D8, OUTPUT);
- digitalWrite(LCD_EN,0);
- }
- /*====================================================================
- 功能:写命令
- 输入:8位数据
- 输出:无
- =====================================================================*/
- void WriteCmd_LCD12864(unsignedchar cmdcode){
- chk_busy();
- digitalWrite(LCD_RS,0);
- digitalWrite(LCD_RW,0);
- digitalWrite(LCD_EN,1);
- delay(5);
- bus_write(cmdcode);
- digitalWrite(LCD_EN,0);
- delay(5);
- }
- /*====================================================================
- 功能:写数据
- 输入:8位数据
- 输出:无
- =====================================================================*/
- void WriteData_LCD12864(unsignedchar Dispdata){
- chk_busy();
- digitalWrite(LCD_RS,1);
- digitalWrite(LCD_RW,0);
- digitalWrite(LCD_EN,1);
- delay(5);
- bus_write(Dispdata);
- digitalWrite(LCD_EN,0);
- delay(5);
- }
- /*==========================================================================
- 功能:发送字符串
- 输入:地址,字符串
- 输出:无
- ===========================================================================*/
- void WriteWord_LCD12864(unsignedchar a,unsignedchar*d){//向LCD指定位置发送一个字符串,长度64字符之内。
- unsignedchar*s;
- u2g(d,strlen(d),u2g_out,255);
- s=u2g_out;
- WriteCmd_LCD12864(a);
- while(*s>0){
- WriteData_LCD12864(*s);
- s++;
- }
- }
- /*==========================================================================
- 功能:发送字符串2
- 输入:字符串
- 输出:无
- ===========================================================================*/
- void WriteWord_LCD12864_2(unsignedchar*d){//向LCD发送一屏字符串,长度64字符之内。
- int i=0;
- unsignedchar*s;
- u2g(d,strlen(d),u2g_out,255);
- s=u2g_out;
- WriteCmd_LCD12864(0x80);
- while(*s>0){
- WriteData_LCD12864(*s);
- s++;
- i++;
- if(i==16){
- WriteCmd_LCD12864(0x90);
- }
- if(i==32){
- WriteCmd_LCD12864(0x88);
- }
- if(i==48){
- WriteCmd_LCD12864(0x98);
- }
- }
- }
- /*==========================================================================
- 功能:初始化LCD
- 输入:无
- 输出:无
- ===========================================================================*/
- void Init_LCD12864(void){//初始化LCD屏
- pinMode(D1, OUTPUT);//设置GPIO
- pinMode(D2, OUTPUT);
- pinMode(D3, OUTPUT);
- pinMode(D4, OUTPUT);
- pinMode(D5, OUTPUT);
- pinMode(D6, OUTPUT);
- pinMode(D7, OUTPUT);
- pinMode(D8, OUTPUT);
- pinMode(LCD_RS, OUTPUT);
- pinMode(LCD_RW, OUTPUT);
- pinMode(LCD_EN, OUTPUT);
- WriteCmd_LCD12864(0x38);//选择8bit数据流
- delay(20);
- WriteCmd_LCD12864(0x01);//清除显示,并且设定地址指针为00H
- delay(20);
- WriteCmd_LCD12864(0x0c);//开显示(无游标、不反白)
- delay(20);
- }
- int main(int args,char*argv[]){
- wiringPiSetup();
- Init_LCD12864();
- WriteCmd_LCD12864(0x01);
- WriteWord_LCD12864(0x80,"Hello LCD12864");
- if(argv[1]){
- WriteCmd_LCD12864(0x01);
- WriteCmd_LCD12864(0x80);
- WriteWord_LCD12864_2(argv[1]);
- }
- }
0 0
- 树莓派驱动LCD12864(st7920控制器)
- LCD12864液晶使用-ST7920
- 12864学习(控制器ST7920)
- LCD12864 文本显示示例(控制芯片ST7920)
- STM32驱动ST7920的12864液晶(串行方式)
- 51驱动LCD12864
- STM32 驱动液晶LCD12864
- STM32驱动LCD12864显示屏
- MEGA32驱动LCD12864 C源程序(调试通过)和原理图
- MEGA32驱动LCD12864 C源程序(调试通过)和原理图
- zigbee网关 cc2530终端裸机串行驱动12864(字库ST7920)
- zigbee网关 cc2530终端裸机串行驱动12864(字库ST7920)显示图片
- wince下LCD16032驱动研究(ST7920)
- LCD12864使用(链)
- LCD12864
- LCD12864
- HG1286412-LYH液晶屏(ST7920控制器)描点函数
- LCD12864液晶显示屏串行方式驱动详解
- C++参数传递
- oracle数据安装
- JavaScript拥有动态类型
- mysql数据库分页查询
- 剑指offer面试题之用两个栈实现队列
- 树莓派驱动LCD12864(st7920控制器)
- LightOJ 1341 - Aladdin and the Flying Carpet
- CSS继承详解
- 15电气 齐振昊 实验名称:在VB中制作计时器(运行时时间是停止的)
- Python decorators example
- 文件的读取,动态内存的使用
- maven3创建项目
- 旋转打印矩阵。这个题目我见过很多次都是放弃了。
- 不用加减乘除做加法