void checkBF()//检查BF位,判断LCD 是否忙
{
unsigned int check
EALLOW;
GpioMuxRegs.GPAMUX.all=0xff00;//设EVA前8脚为通用I/O口,其他为保留功能
GpioMuxRegs.GPBMUX.all=0xff00;//设GPIOB0~2为通用I/O口,其他为保留功能
GpioMuxRegs. GPBDIR.all=0x00ff;// 设GPIOB0~2为输出引脚
EDIS;
GpioDataRegs. GPBDAT.bit.GPIOB0=0;
GpioDataRegs. GPBDAT.bit.GPIOB1=1;//读BF的状态,RS=0,R/W=1
do {
GpioDataRegs. GPBDAT.bit.GPIOB2=1;//E=1
Check=GpioDataRegs. GPADAT.all;
Delay1();//延时140ns以上
GpioDataRegs. GPBDAT.bit.GPIOB2=0;//E=0
check=0x80✓//当第7位,即BF为0时才可以操作
}while(!check= =0x00);
}
void InitialLCD()//液晶初始化
{
writeINS(0x30);//LCD选择为8位并行数据传输,不扩充指令
Delay2(5);//延时大于100us
writeINS(0x0E);//开显示,开游标,关反白
Delay2(5);//延时大于100us
writeINS(0x01);//清屏显示
Delay2(500);//延时大于10ms
writeINS(0x06);//DDRAM的地址计数器(AC)加1
Delay2(5);//延时大于100us
}
void Delay1()//延时子程序
{
Int i;
for ( i=0;i<5;i++ );
}
void Delay2(unsigned int nTime)
{
int ii,jj,kk=0;
for ( ii=0;ii<nTime;ii++ )
{
for ( jj=0;jj<215;jj++ )
{
kk++;
}
}
}
欲在ST7920中某一个位置显示中文字符时,应先设定显示字符位置,即先设定显示地址,再写入中文字符编码。当字符编码为两字节时,应先写入高位字节,再写入低位字节。ST7920的字符显示地址RAM地址从80H到9FH,与4行8列共32个字符显示区域一一对应。另外,显示ASCII字符过程与显示中文字符过程相同,不过在显示连续字符时,只须设定一次显示位置,有模块自动对地址加1指向下一个字符位置,否则,显示的字符中将会有一个空ASCII字符位置。本文以从字库中显示“液晶”字样为例,给出显示“液晶”字符的主程序如下:
main()
{
InitialLCD();//初始化液晶
writeINS(0x80);//设定显示地址为首行首列
writeDATA (0xD2);
writeDATA (0xBA);//显示“液”
writeDATA (0xBE);
writeDATA (0xA6);//显示“晶”
for(;;);
}
3 结论
从上面的应用介绍可看出,本文所采用的方法不需要增加硬件,电路结构简单,只占用了TMS320F2812的多达56个I/O引脚中的11个。所以,对剩余较多不用I/O引脚的DSP系统完全可以采用这种接口控制方法,绝大多数下是可以满足要求的。通过该设计我们可以说,采用TMS320F2812模拟外部慢速设备的时序实现与其外设的接口这种方法是一种简单有效的方法,并为各种系统显示、慢速外设的接口设计提供了一种可以借鉴的方法。