This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
/-----LCD12864引脚的设置-----/
GpioMuxRegs.GPBMUX.all=0x0000;//将GPIOB设置为通用数字输入输出通道
GpioMuxRegs.GPBDIR.all=0xFFFF;//将GPIOB的方向设置为输出方向
GpioMuxRegs.GPAMUX.all=0x0000;//将GPIOA设置为通用数字输入输出通道
GpioMuxRegs.GPADIR.all=0xFFFF;//将GPIOA的方向设置为输出方向
/-------显示字符的设置--------------/
char hang1[12]={ "陕","西","科","技","大","学"};
char hang2[8]={ "电","流","1",":"};
char hang3[8]= {"电","流","2",":"};
char hang4[8]= {"电","流","3",":"};
char hang5[8]= {"电","流","4",":"};
char hang6[8]= {"电","流","5",":"};
char hang7[8]= {"电","流","6",":"};
/------LCD初始化-----------/
void Initlcd(void)
{
DELAY_US(4000);//等待时间>40ms
write_LCD_command(0x30);//功能设定:8位数据,基本指令操作
DELAY_US(100);//等待时间>100us
write_LCD_command(0x30);//功能设定:8位数据,基本指令操作
DELAY_US(37);//等待时间>37us
write_LCD_command(0x0C);//显示设定:整体显示,游标关,不反白
DELAY_US(100);//等待时间>100us
write_LCD_command(0x01);//清屏指令
DELAY_US(10000);//等待时间>10ms
write_LCD_command(0x06);//进入点设定:地址指针加1
DELAY_US(1000);
write_LCD_command(0x80);
}
/-------------显示程序------------/
void display1(void)
{
int Num;
write_LCD_command(0x80);
for(Num=0;Num<12;Num++)
{
write_LCD_data(hang1[num][Num]);
}
write_LCD_command(0x90);//写第二行
for(Num=0;Num<8;Num++)
{
write_LCD_data(hang2[num][Num]);
}
write_LCD_command(0x94);
for(Num=0;Num<8;Num++)
{
write_LCD_data(hang3[num][Num]);
}
write_LCD_command(0x88);//写第三行
for(Num=0;Num<8;Num++)
{
write_LCD_data(hang4[num][Num]);
}
write_LCD_command(0x8C);
for(Num=0;Num<8;Num++)
{
write_LCD_data(hang5[num][Num]);
}
write_LCD_command(0x98);//写第四行
for(Num=0;Num<8;Num++)
{
write_LCD_data(hang6[num][Num]);
}
write_LCD_command(0x9C);
for(Num=0;Num<8;Num++)
{
write_LCD_data(hang7[num][Num]);
}
}
以下作补充
/--------LCD12864写数据,写命令指令---------/
void write_LCD_command(int value)
{
read_busy();
GpioDataRegs.GPADAT.bit.GPIOA1=0;
GpioDataRegs.GPADAT.bit.GPIOA3=0;
GpioDataRegs.GPADAT.bit.GPIOA5=1;
LCD_databus(value);
// DELAY_US(1000);
GpioDataRegs.GPADAT.bit.GPIOA5=0;
}
void write_LCD_data(int value)
{
read_busy();
GpioDataRegs.GPADAT.bit.GPIOA1=1;
GpioDataRegs.GPADAT.bit.GPIOA3=0;
GpioDataRegs.GPADAT.bit.GPIOA5=1;
LCD_databus(value);
// DELAY_US(1000);;
GpioDataRegs.GPADAT.bit.GPIOA5=0;
}
/---------LCD12864数据引脚赋值-------------/
void LCD_databus(int value)
{
GpioDataRegs.GPBDAT.bit.GPIOB0=(value>>7)&1;//DB7
GpioDataRegs.GPBDAT.bit.GPIOB2=(value>>6)&1;//DB6
GpioDataRegs.GPBDAT.bit.GPIOB4=(value>>5)&1;//DB5
GpioDataRegs.GPBDAT.bit.GPIOB7=(value>>4)&1;//DB4
GpioDataRegs.GPADAT.bit.GPIOA14=(value>>3)&1;//DB3
GpioDataRegs.GPADAT.bit.GPIOA11=(value>>2)&1;//DB2
GpioDataRegs.GPADAT.bit.GPIOA9=(value>>1)&1;//DB1
GpioDataRegs.GPADAT.bit.GPIOA7=value&1;//DB0
}
请将所有通过DAT寄存器实现输出高或低电平的语句更改成使用SET/CLEAR/TOGGLE寄存器对应高/低/翻转,详细原因请参考:
http://processors.wiki.ti.com/index.php?title=General_Purpose_IO_(GPIO)_FAQ_for_C2000#Q:_Back-to-back_DAT_register_writes_do_not_work_as_expected