刚刚接触430,在各方面的帮助下,终于将1602给跑起来了,分享一下:
#include
#include
#define uchar unsigned char
#define uint unsigned int
uchar table[]="X XXXX XXX XXXX!";
uchar table1[]="XXXX XXXXXXX";
#define RS P2OUT //设置P2.0--rs
#define RW P2OUT //设置P2.1--rw
#define EN P2OUT //设置P2.2--en
#define data_port P1OUT //设置P1.0-P1.7为数据指令传输端口(对应D0~D7)
#define com_port P1OUT
/*延时程序ms*/
void delay_ms(uint n)
{
uint i,j;
for(i=n;i>0;i--)
for(j=1140;j>0;j--);
}
/*写地址*/
void write_com(uchar com)
{
RS&=~BIT0;
delay_ms(5);
EN&=~BIT2;
P1OUT&=0X00;
P1OUT|=com;
EN|=BIT2;
delay_ms(5);
EN&=~BIT2;
}
/*写数据*/
void write_data(uchar data)
{
RS|=BIT0;
delay_ms(5);
EN&=~BIT2;
P1OUT&=0X00;
P1OUT|=data;
EN|=BIT2;
delay_ms(5);
EN&=~BIT2;
}
/*1602初始化*/
void init()
{
RW&=~BIT1;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
}
void main()
{
WDTCTL=WDTPW+WDTHOLD; //关闭看门狗
BCSCTL1=CALBC1_1MHZ; //BCSCTL1 Calibration Data for 1MHz
DCOCTL=CALDCO_1MHZ; //DCOCTL Calibration Data for 1MHz
BCSCTL2=SELM_1+DIVM_0; //设置MCLK为1MHZ
P2SEL&=0X00; //设置P2口为I/O模式
P1SEL&=0X00; //设置P1口为I/O模式
P2DIR|=0XFF; //设置P2口为输出模式
P1DIR|=0XFF; //设置P1口为输出模式
P2OUT&=0X00;
P1OUT&=0X00;
init();
while(1)
{
uint i;
write_com(0x80+0X10+0x01);
for(i=0;i<16;i++) //写第一行数据
{
write_data(table);
delay_ms(1);
}
write_com(0x80+0X10+0x40+0x03); //写第二行数据
for(i=0;i<12;i++)
{
write_data(table1);
delay_ms(1);
}
for(i=0;i<17;i++) //整屏移动
{
write_com(0x18);
delay_ms(50);
}
delay_ms(520);
for(i=0;i<16;i++) //整屏移动
{
write_com(0x18);
delay_ms(50);
}
write_com(0x01); //清屏
}
}
|