问题描述
- MSP430G2553并行驱动12864液晶的程序,请大家帮我看看问题出在哪里?上电无显示。 5C
- 请大家帮我看一下程序,哪个地方出了问题,上电没有反应,我的液晶型号是12864B V2.0,还有如果大家帮我指点一下程序风格,不胜感激。
只有C币5个……全部贡献啦~
主函数
#include ""main.h""void main(void){ init_cpu(); //初始化芯片 init_lcdport(); init_lcd(); //初始化液晶 while(1){ write_cmd(0x80); write_dat('A'); }}void init_cpu(void) { WDTCTL = WDTPW + WDTHOLD; //关闭看门狗 BCSCTL1 = CALBC1_1MHZ; //设置DCO为1MHZ DCOCTL = CALDCO_1MHZ; }
液晶12864
端口定义:DB0~DB7->P1.0~P1.7RS ->P2.0R/W->P2.1E ->P2.2RST->P2.3
#include ""lcd12864b.h""void init_lcd(void) //初始化液晶{ delay_nms(50); //上电等待 RST_H; delay_nms(1); RST_L; delay_nms(2); RST_H; write_cmd(0X30); //基本指令集 delay_nms(1); write_cmd(0X30); delay_nms(1); write_cmd(0X0C); //显示开,游标关,反白禁止 delay_nms(1); write_cmd(0X01); //清屏 delay_nms(10);}void set_textpos(unsigned char Xunsigned char Y) //设定显示坐标{ unsigned char textpos; switch (X){ case 0: textpos = 0X80; //X:0-3Y:0-7 break; case 1: textpos = 0X90; break; case 2: textpos = 0X88; break; case 3: textpos = 0X98; break; default: break; } textpos = textpos + Y; write_cmd(textpos);}void init_lcdport(void) //定义与液晶有关的端口{ P1SEL = 0X00; P1DIR = 0XFF; P2SEL = 0X00; //定义为普通IO口 P1DIR |= BIT0 + BIT1 + BIT2 + BIT3; //定义IO口为输出}void write_cmd(unsigned char wcmd){ RS_L; //命令 RW_L; //写 E_L; P1OUT = wcmd; delay_nms(2); //等待数据稳定 E_H; delay_nms(2); //等待写入完毕 E_L;}void write_dat(unsigned char wdat){ RS_H; //数据 RW_L; //写 E_L; P1OUT = wdat; delay_nms(2); E_H; delay_nms(2); E_L;}
解决方案
我已经找到原因了,是因为我的IO口初始化P2写成了P1,小错误让我看了2个多小时,我一直以为是时序的问题。
另外,希望有经验的前辈能看一下我的程序,不看对错,就看规范不规范就好,把做的不好的地方给我一些指点,谢谢。
void init_lcdport(void) //定义与液晶有关的端口{ P1SEL = 0X00; P1DIR = 0XFF; P2SEL = 0X00; P1DIR |= BIT0 + BIT1 + BIT2 + BIT3; //错在这一句,应该是P2DIR |= BIT0 + BIT1 + BIT2 + BIT3;}
解决方案二:
既然楼主解决了 那我来接个C币吧
时间: 2024-10-31 14:32:02