分享到:
/*********************************************************** 程序功能:在12864液晶上显示一屏汉字 测试说明:观察液晶显示 ***********************************************************/ #include "msp430.h" #include "msp430x14x.h" #define LCD_DataIn P4DIR=0x00 //数据口方向设置为输入 #define LCD_DataOut P4DIR=0xff //数据口方向设置为输出 #define LCD2MCU_Data P4IN #define MCU2LCD_Data P4OUT #define LCD_CMDOut P6DIR|=0xFC //P3口的低三位设置为输出 #define LCD_RS_H P6OUT|=BIT2 //P6.2 #define LCD_RS_L P6OUT&=~BIT2 //P6.2 #define LCD_RW_H P6OUT|=BIT3 //P6.3 #define LCD_RW_L P6OUT&=~BIT3 //P6.3 #define LCD_EN_H P6OUT|=BIT4 //P6.4 #define LCD_EN_L P6OUT&=~BIT4 //P6.4 #define LCD_PSB_H P6OUT|=BIT5 //P6.5 #define LCD_PSB_L P6OUT&=~BIT5 //P6.5 #define LCD_RST_H P6OUT|=BIT6 //P6.6 #define LCD_RST_L P6OUT&=~BIT6 //P6.6 /*******************************************/ void Delay_1ms(void); void Delay(unsigned int n); void Write_Cmd(unsigned char cod); void Write_Data(unsigned char dat); void Ini_Lcd(void); void Disp_HZ(unsigned char addr,const unsigned char * pt,unsigned char num); void Disp_ND(unsigned char addr,unsigned int thickness); void Draw_TX(unsigned char Yaddr,unsigned char Xaddr,const unsigned char * dp) ; void Draw_PM(const unsigned char *ptr); /*******************************************/ const char hang1[] = {"祥瑞不在凤凰麒麟"}; const char hang2[] = {"太平须得边将忠臣"}; const char hang3[] = {"但得百僚师长肝胆"}; const char hang4[] = {"不用三军罗绮金银"}; typedef unsigned char uchar; typedef unsigned int uint; extern const unsigned char shuzi_table[]; /***************************主函数*************************/ void main( void ) { WDTCTL = WDTPW + WDTHOLD; //关狗 Ini_Lcd(); //初始化液晶 Disp_HZ(0x80,hang1,8); Disp_HZ(0x90,hang2,8); Disp_HZ(0x88,hang3,8); Disp_HZ(0x98,hang4,8); LPM4; } /******************************************* 函数名称:Delay_1ms 功 能:延时约1ms的时间 参 数:无 返回值 :无 ********************************************/ void Delay_1ms(void) { uchar i; for(i = 150;i > 0;i--) _NOP(); } /******************************************* 函数名称:Delay_Nms 功 能:延时N个1ms的时间 参 数:n--延时长度 返回值 :无 ********************************************/ void Delay_Nms(uint n) { uint i; for(i = n;i > 0;i--) Delay_1ms(); } /******************************************* 函数名称:Write_Cmd 功 能:向液晶中写控制命令 参 数:cmd--控制命令 返回值 :无 ********************************************/ void Write_Cmd(uchar cmd) { uchar lcdtemp = 0; LCD_RS_L; LCD_RW_H; LCD_DataIn; do //判忙 { LCD_EN_H; _NOP(); lcdtemp = LCD2MCU_Data; LCD_EN_L; } while(lcdtemp & 0x80); LCD_DataOut; LCD_RW_L; MCU2LCD_Data = cmd; LCD_EN_H; _NOP(); LCD_EN_L; } /******************************************* 函数名称:Write_Data 功 能:向液晶中写显示数据 参 数:dat--显示数据 返回值 :无 ********************************************/ void Write_Data(uchar dat) { uchar lcdtemp = 0; LCD_RS_L; LCD_RW_H; LCD_DataIn; do //判忙 { LCD_EN_H; _NOP(); lcdtemp = LCD2MCU_Data; LCD_EN_L; } while(lcdtemp & 0x80); LCD_DataOut; LCD_RS_H; LCD_RW_L; MCU2LCD_Data = dat; LCD_EN_H; _NOP(); LCD_EN_L; } /******************************************* 函数名称:Ini_Lcd 功 能:初始化液晶模块 参 数:无 返回值 :无 ********************************************/ void Ini_Lcd(void) { /////////////////////////////////////// LCD_RST_L; //复位LCD Delay_1ms(); //保证复位所需要的时间 LCD_RST_H; //恢复LCD正常工作 _NOP(); LCD_PSB_H; //设置LCD为8位并口通信 //////////////////////////////////////// LCD_CMDOut; //液晶控制端口设置为输出 Delay_Nms(500); Write_Cmd(0x30); //基本指令集 Delay_1ms(); Write_Cmd(0x02); // 地址归位 Delay_1ms(); Write_Cmd(0x0c); //整体显示打开,游标关闭 Delay_1ms(); Write_Cmd(0x01); //清除显示 Delay_1ms(); Write_Cmd(0x06); //游标右移 Delay_1ms(); Write_Cmd(0x80); //设定显示的起始地址 } /******************************************* 函数名称:Disp_HZ 功 能:控制液晶显示汉字 参 数:addr--显示位置的首地址 pt--指向显示数据的指针 num--显示字符个数 返回值 :无 ********************************************/ void Disp_HZ(uchar addr,const uchar * pt,uchar num) { uchar i; Write_Cmd(addr); for(i = 0;i < (num*2);i++) Write_Data(*(pt++)); }
(0 )
(0 )


-
- 0000000000000000
-
1888 发帖7917 回复34980 积分
- 私信他 +关注
发表回复
块
导
航
举报
请选择举报类别
- 广告垃圾
- 违规内容
- 恶意灌水
- 重复发帖