📄 main.c
字号:
/*===============================================================
硬件连接: DATA:P4 P5.5-LCD_COMMAND(0)/DATA(1) P5.6-LCD_ENABLE
P5.7-LCD_READ(1,ENABLE=1)/WRITE(0,ENABLE=1->0)
=================================================================*/
#include "io430.h"
//#include "msp430x14x.h"
#define LCD_DATA_IN P4IN
#define LCD_DATA_OUT P4OUT
#define LCD_COMMAND_OUT P4OUT
#define LCD_DIR P4DIR
#define LCD_READ P5OUT |= BIT7
#define LCD_WRITE P5OUT &= ~BIT7
#define LCD_ENABLE_H P5OUT |= BIT6
#define LCD_ENABLE_L P5OUT &= ~BIT6
#define LCD_DATA P5OUT |= BIT5
#define LCD_COMMAND P5OUT &= ~BIT5
/*
unsigned char str1[]="ll";
unsigned char str2[]="shdfjkewoi";
unsigned char str3[]="1654621";
unsigned char str4[]="我";
*/
void initLCD();
void write_command(unsigned char COMMAND);
void write_data(unsigned char DATA);
void asc_tran(unsigned char *asc);
char LCD_busy();
void delay_us();
void delay_ms();
void LCD_set_xy(unsigned char x, unsigned char y);
void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s);
void initCLK();
char *str1,*str2,*str3,*str4,*str5;
int main( void )
{ //str1="0x00,0x0d";
str2="河北科技大学";
str3="信息学院";
str4="电科专业";
str5="张志永";
P6SEL &= 0x4; //初始化D12的片选
P6DIR |= 0x4;
P6OUT |=0x4; //使CS输出为高,否则为使数据线冲突
P5DIR = 0XFF;
P4DIR = 0XFF;
initCLK();
initLCD();
while(1)
{
/* write_command(0x83); //设置显示位址
asc_tran(str1); //显示字符串
write_command(0x97); //设置显示位址
asc_tran(str2); //显示字符串
delay_ms(1000); //延迟1秒
write_command(0x01); //清除显示器
write_command(0x83); //设置显示位址
asc_tran(str3); //显示字符串
write_command(0x94); //设置显示位址
asc_tran(str4); //显示字符串
delay_ms(1000); //延迟
write_command(0x01); //清除显示器
*/
write_command(0x01); //清屏
delay_us(1000);
LCD_write_string(2,1,str1);
delay_us(2000);
write_command(0x01);
LCD_write_string(0,2,str2);
LCD_write_string(0,2,str3);
LCD_write_string(0,2,str4);
LCD_write_string(2,0,str5);
delay_us(2000);
}
return 0;
}
void initLCD()
{
// write_command(0x38);
// write_command(0x38);
// write_command(0x38);
// write_command(0x38);
// write_command(0x30);
write_command(0x01);
write_command(0x0d);
write_command(0x80);
}
void write_command(unsigned char COMMAND)
{
while(LCD_busy());
LCD_ENABLE_L;
LCD_COMMAND;
LCD_WRITE;
delay_us(2);
LCD_ENABLE_H;
LCD_COMMAND_OUT = COMMAND;
delay_us(2);
LCD_ENABLE_L;
}
void write_data(unsigned char DATA)
{
while(LCD_busy());
LCD_ENABLE_L;
LCD_DATA;
LCD_WRITE;
delay_us(2);
LCD_ENABLE_H;
LCD_COMMAND_OUT = DATA;
delay_us(2);
LCD_ENABLE_L;
}
void delay_us(int time)
{
do
{
time--;
}
while(time>1);
}
void delay_ms(unsigned int time)
{
while(time != 0)
{
delay_us(2);
time--;
}
}
char LCD_busy()
{
char status;
P4DIR = 0;
LCD_ENABLE_L;
LCD_COMMAND;
LCD_READ;
delay_us(2);
LCD_ENABLE_H;
delay_us(2);
status = P4IN&BIT7;
LCD_ENABLE_L;
P4DIR = 0XFF;
return status;
}
/*
void asc_tran(unsigned char *asc)
{
while((*asc) != 0) //判断字是否结束
{
write_data(*asc); //向lcd写入字符串
asc++; //移下一个字符
}
}
*/
void LCD_set_xy( unsigned char x, unsigned char y )
{
unsigned char address;
switch(y){
case 0:
address = 0x80 + x;
break;
case 1:
address = 0x90 + x;
break;
case 2:
address = 0x88 + x;
break;
case 3:
address = 0x98 + x;
break;
default:address = 0x80 + x;}
write_command( address);
}
void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s)
{
LCD_set_xy( X, Y );
while (*s)
{
write_data( *s );
s ++;
delay_us(1);
}
}
void initCLK()
{
unsigned char i;
WDTCTL = WDTPW + WDTHOLD; //Stop WDT
BCSCTL1 &= ~XT2OFF; //Enable high frequency oscillator 12M
BCSCTL2 = SELM1 + SELS; //0X88 MCLK = SMCLK = 6M Hz
do
{
IFG1 &= ~OFIFG; //Clear OSCFault flag
for (i = 0xff; i > 0; i--); //Time for flag to set
}
while ((IFG1 & OFIFG) == OFIFG); //OSCFault flag still set?
BCSCTL2 = SELM1 + SELS; //0X88 MCLK = SMCLK = 6M Hz
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -