|
MSP430单片机做的驱动常见的LCD1602液晶屏的源程序:
完整的程序下载:
MSP430单片机驱动LCD1602液晶屏源程序.rar
(23.6 KB, 下载次数: 0)
下面是部分源码预览:
- #include <msp430x22x4.h> /*单片机寄存器头文件*/
- #include "lcd1602.h" /*LCD驱动头文件*/
- /*-////////////////////////////函数说明///////////////////////////////-*/
- /*- 名 称:Serial_To_Parallel() -*/
- /*- 功 能:输出通过74HC164由并行转为串行 -*/
- /*- 输入变量:无 -*/
- /*- 输出变量:无 -*/
- /*-///////////////////////////////////////////////////////////////////-*/
- void Serial_To_Parallel(char dat)
- {
- unsigned char i;
- for(i=0;i<8;i++)
- {
- if(dat&0x80)
- Data_OUT_H;
- else
- Data_OUT_L;
- CLK_H;
- _NOP();//空延迟
- _NOP();
- _NOP();
- CLK_L;
- dat<<=1;
- }
- }
- /*-////////////////////////////函数说明///////////////////////////////-*/
- /*- 名 称:Delay() -*/
- /*- 功 能:延时 -*/
- /*- 输入变量:无 -*/
- /*- 输出变量:无 -*/
- /*-///////////////////////////////////////////////////////////////////-*/
- void Delay(unsigned int count)
- {
- unsigned int i=count;
- while (i != 0)
- {
- i--;
- }
- }
- /*-////////////////////////////函数说明///////////////////////////////-*/
- /*- 名 称:LCD_WriteCommand(unsigned char Com) -*/
- /*- 功 能:LCD写入命令 -*/
- /*- 输入变量:unsigned char Com(命令字) -*/
- /*- 输出变量:无 -*/
- /*-///////////////////////////////////////////////////////////////////-*/
- void LCD_WriteCommand(unsigned char Com)
- {
- RS_SET_L; //命令
- RW_SET_L; //写操作
- _NOP();
- Serial_To_Parallel(Com);
- _NOP();
- E_SET_H;
- _NOP();
- E_SET_L;//使能端下降沿沿写入
- Delay(Delay_Count);
- }
- /*-////////////////////////////函数说明///////////////////////////////-*/
- /*- 名 称:LCD_WriteData(unsigned char Dat) -*/
- /*- 功 能:LCD写入数据 -*/
- /*- 输入变量:unsigned char Dat(数据) -*/
- /*- 输出变量:无 -*/
- /*-///////////////////////////////////////////////////////////////////-*/
- void LCD_WriteData(unsigned char Dat)
- {
- RS_SET_H; //数据
- RW_SET_L; //写操作
- Serial_To_Parallel(Dat);
- _NOP();
- E_SET_H;
- _NOP();
- E_SET_L;//使能端下降沿沿写入
- Delay(Delay_Count);
- }
- /*-////////////////////////////函数说明///////////////////////////////-*/
- /*- 名 称:LCD_SetXY(char x,char y) -*/
- /*- 功 能:设定LCD写入数据指针 -*/
- /*- 输入变量:unsigned char Dat(数据) -*/
- /*- 输出变量:无 -*/
- /*-///////////////////////////////////////////////////////////////////-*/
- void LCD_SetXY(char x,char y)
- {
- switch(y)//数据指针=80+地址码(0-27H,40-67H)
- {
- case 1:LCD_WriteCommand(0x7f + x);break; //第1行
- case 2:LCD_WriteCommand(0xbf + x);break; //第2行
- }
- }
- /*-////////////////////////////函数说明///////////////////////////////-*/
- /*- 名 称: LCD_DispStr(...) -*/
- /*- 功 能: LCD写入字符 -*/
- /*- 输入变量:x(列数),y(行数),*p字符串指针,length(长度) -*/
- /*- 特殊说明:x或者y为0时候,液晶显示使用默认地址(不指定新地址) -*/
- /*- 输出变量:无 -*/
- /*-///////////////////////////////////////////////////////////////////-*/
- void LCD_DispCharArray(char x,char y,char *p,unsigned char length)
- {
- if (x !=0x00 && y!=0x00)
- {
- LCD_SetXY(x,y);//数据有效重新设置位置
- }
- while(length!=0)
- {
- LCD_WriteData(*p);
- p++;
- length--;
- }
- }
- /*-////////////////////////////函数说明///////////////////////////////-*/
- /*- 名 称: LCD_DispStr(...) -*/
- /*- 功 能:LCD写入字符串,自动识别结束符号‘\0’ -*/
- /*- 输入变量:x(列数),y(行数),*p(字符串指针) -*/
- /*- 特殊说明:x或者y为0时候,液晶显示使用默认地址(不指定新地址) -*/
- /*- 输出变量:无 -*/
- /*-///////////////////////////////////////////////////////////////////-*/
- void LCD_DispStr(char x,char y,char *p) //exp:LCD_DispStr(1,1,"LCD_Serial_test");
- {
- if (x !=0x00 && y!=0x00)
- {
- LCD_SetXY(x,y);//数据有效重新设置位置
- }
- while(*p!='\0')
- {
- LCD_WriteData(*p);
- p++;
- }
- }
- /*-////////////////////////////函数说明///////////////////////////////-*/
- /*- 名 称:LCD_Init() -*/
- /*- 功 能:LCD初始化 -*/
- /*- 输入变量:无 -*/
- /*- 输出变量:无 -*/
- /*-///////////////////////////////////////////////////////////////////-*/
- void LCD_Init()
- {
- E_SET_OUT; //输出端口初始化部分
- RW_SET_OUT;
- RS_SET_OUT;
- DataPort_SET_OUT;
- E_SET_L; //使能拉低
- RW_SET_L; //读写拉低
- RS_SET_L; //选择拉低
- CLK_SET_OUT;
-
- LCD_WriteCommand(0x38); //写命令部分
- LCD_WriteCommand(0x01); //清屏
- LCD_WriteCommand(0x06);
- LCD_WriteCommand(0x0c); //开显示,不显示光标
- LCD_WriteCommand(0x00);
- }
- /*-////////////////////////////函数说明///////////////////////////////-*/
- /*- 名 称:LCD_CLR() -*/
- /*- 功 能:LCD清屏 -*/
- /*- 输入变量:无 -*/
- /*- 输出变量:无 -*/
- /*-///////////////////////////////////////////////////////////////////-*/
- void LCD_CLR()
- {
- LCD_WriteCommand(0x01); //清屏
- }
复制代码
|
|