我原来的51单片机驱动RA8806程序正常,移植到STM32却不显示字符,头大了。
51程序如下:
#include "mcu.h"
#include "ra8806reg.h"
sbit rs = P3^4;
sbit wr = P3^5;
sbit rd = P3^6;
sbit rst = P3^7;
sbit busy = P4^4;
sbit cs1 = P4^5;
#define BUS P1
////////////////////////////////
void delay_nms(unsigned int n)
{
unsigned int i,j;
for(i=n;i>0;i--)
{
for(j=125;j>0;j--)
{
;
}
}
}
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
void softrst()
{
delay_nms(5);//2
cs1=0;
rd = 1;
rst=0;
delay_nms(15);//5
rst=1;
delay_nms(15);//5
}
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
unsigned char LCD_CmdRead(unsigned char Addr)
{
unsigned char Data;
cs1=0;
rs=1;
rd=1;
BUS=Addr;
wr=0;
wr=1;
BUS=0XFF;
rs=0;
wr=1;
rd=1;
rd=0;
Data=BUS;
return Data;
}
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
void LCD_CmdWrite(unsigned char cmdaddr)//8080
{
cs1=0;
rd=1;
rs=1;
BUS=cmdaddr;
wr=0;
wr=1;
cs1=1;
}
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
void LCD_DataWrite(unsigned char wrdata)
{
while(busy==0);
cs1=0;
rd=1;
rs=0;
BUS=wrdata;
wr=0;
wr=1;
cs1=1;
}
//******************???????¨????******************
void clearsnow(void) //????±?·?????????·¨???????????¨????????????????????????
{
unsigned char temp;
temp=LCD_CmdRead(0x01);
temp |=0x80;
LCD_CmdWrite(0x01);
LCD_DataWrite(temp);
}
//******************?????????¨????--????????******************
void noclearsnow(void)
{ unsigned char temp; //????±?·?????????·¨???????????¨????
temp=LCD_CmdRead(0x01);
temp &=0x7f;
LCD_CmdWrite(0x01);
LCD_DataWrite(temp);
}
//******************X,Y×?±ê?¨??******************
void LCD_GotoXY(unsigned char xx,unsigned char yy)
{ LCD_CmdWrite(0x60);
LCD_DataWrite(xx);
LCD_CmdWrite(0x70);
LCD_DataWrite(yy);
}
//*************????????**************************
void LCD_Graphic(void)
{ unsigned char temp;
temp=LCD_CmdRead(0x00);
temp &=0xf7;
LCD_CmdWrite(0x00);
LCD_DataWrite(temp);
clearsnow(); //???????????¨????
}
//*************??×?????**************************
void LCD_Text(void)
{ unsigned char temp;
temp=LCD_CmdRead(0x00);
temp |=0x08;
LCD_CmdWrite(0x00);
LCD_DataWrite(temp);
noclearsnow(); //??±????????¨????
}
//***********DDRAM1 ????**************************
void Only_Show_Page1(void)
{
unsigned char temp;
temp=LCD_CmdRead(0x12);
temp &=0x9f;
temp |=0x10;
LCD_CmdWrite(0x12);
LCD_DataWrite(temp);
}
//***********DDRAM2 ????**************************
void Only_Show_Page2(void)
{
unsigned char temp;
temp=LCD_CmdRead(0x12);
temp &=0xaf;
temp |=0x20;
LCD_CmdWrite(0x12);
LCD_DataWrite(temp);
}
//***********DDRAM1??DDRAM2 ??????????***************
void Show_Two_Layer(void)
{
unsigned char temp;
temp=LCD_CmdRead(0x12);
temp &=0xbf;
temp |=0x30;
LCD_CmdWrite(0x12);
LCD_DataWrite(temp);
}
//***********DDRAM1??DDRAM2 OR·???????***************
void OR_Two_Layer(void)
{
unsigned char temp;
temp=LCD_CmdRead(0x12);
temp &=0xf3;
LCD_CmdWrite(0x12);
LCD_DataWrite(temp);
}
//***********????DDRAM1*******************************
void Access_Page1(void)
{
unsigned char temp;
temp=LCD_CmdRead(0x12);
temp &=0xfd;
temp |=0x01;
LCD_CmdWrite(0x12);
LCD_DataWrite(temp);
}
//***********????DDRAM2*******************************
void Access_Page2(void)
{
unsigned char temp;
temp=LCD_CmdRead(0x12);
temp &=0xfe;
temp |=0x02;
LCD_CmdWrite(0x12);
LCD_DataWrite(temp);
}
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
void displays(unsigned char x,unsigned char y,unsigned char *m)
{
unsigned int iiii=0,pppp=0,c=0;
LCD_Graphic(); //????????????
LCD_GotoXY(x,y); //???¨×?±ê??00??00
LCD_CmdWrite(0xb0);
for(iiii=0;iiii<80;iiii++)
{
for(pppp=0;pppp<40;pppp++)
{
LCD_DataWrite(m[c++]);
}
}
}
///////////////////////////////////////////
void lcd_inital()
{
LCD_CmdWrite(WLCR); //[00H] , Default --> 0x00
LCD_DataWrite(0x04); //???????????? disp_off????high
LCD_CmdWrite(MISC); //[01H] , Default --> 0x00
LCD_DataWrite(0x08);
LCD_CmdWrite(ADSR); //[03H] , Default --> 0x00
LCD_DataWrite(0x00);
LCD_CmdWrite(INTR); //[0FH] , Default --> 0x00
LCD_DataWrite(0x00);
LCD_CmdWrite(WCCR); //[10H] , Default --> 0x00
LCD_DataWrite(0x00);
LCD_CmdWrite(CHWI); //[11H] , Default --> 0x00
LCD_DataWrite(0x00);
LCD_CmdWrite(MAMR); //[12H] , Default --> 0x11
LCD_DataWrite(0x11);
LCD_CmdWrite(AWRR); //[20H] , Default --> 0x27
LCD_DataWrite(39);
LCD_CmdWrite(DWWR); //[21H] , Default --> 0x27
LCD_DataWrite(39);
LCD_CmdWrite(AWBR); //[30H] , Default --> 0xEF
LCD_DataWrite(239);
LCD_CmdWrite(DWHR); //[31H] , Default --> 0xEF
LCD_DataWrite(239);
LCD_CmdWrite(AWLR); //[40H] , Default --> 0x00
LCD_DataWrite(0x00);
LCD_CmdWrite(AWTR); //[50H] , Default --> 0x00
LCD_DataWrite(0x00);
LCD_CmdWrite(CURX); //[60H] , Default --> 0x00
LCD_DataWrite(0x00);
LCD_CmdWrite(BGSG); //[61H] , Default --> 0x00
LCD_DataWrite(0x00);
LCD_CmdWrite(EDSG); //[62H] , Default --> 0x00
LCD_DataWrite(0x00);
LCD_CmdWrite(CURY); //[70H] , Default --> 0x00
LCD_DataWrite(0x00);
LCD_CmdWrite(BGCM); //[71H] , Default --> 0x00
LCD_DataWrite(0x00);
LCD_CmdWrite(EDCM); //[72H] , Default --> 0x00
LCD_DataWrite(0x00);
LCD_CmdWrite(BTMR); //[80H] , Default --> 0x00
LCD_DataWrite(0x00);
LCD_CmdWrite(ITCR); //[90H] , Default --> 0x00 ?è???÷??
LCD_DataWrite(0x80);
LCD_CmdWrite(PNTR); //[E0H] , Default --> 0x00
LCD_DataWrite(0x00);
LCD_CmdWrite(FNCR); //[F0H] , Default --> 0x00
LCD_DataWrite(0x00);
LCD_CmdWrite(FVHT); //[F1H] , Default --> 0x00
LCD_DataWrite(0x00);
}
/////////////////????×????ò//////////////////////////
void clear(void)
{
LCD_Graphic(); //????????????
noclearsnow(); //??±????????¨????
LCD_CmdWrite(0xe0);
LCD_DataWrite(0x00);
LCD_CmdWrite(0xf0);
LCD_DataWrite(0xa8);
delay_nms(3);
}
//////////////????????×????ò///////////////////////
void display_all()
{
LCD_Graphic(); //????????????
noclearsnow(); //??±????????¨????
LCD_CmdWrite(0xe0);
LCD_DataWrite(0xff); //??????0xff
LCD_CmdWrite(0xf0);
LCD_DataWrite(0xa8);
delay_nms(3);
}
//////////////×°????????///////////////////////////
void display_snows(unsigned char dat1,unsigned char dat2)
{
unsigned int iiii=0,pppp=0;
LCD_Graphic(); //????????????
LCD_GotoXY(0x00,0x00); //?è?¨X,Y×?±ê????
LCD_CmdWrite(0xb0);
for(iiii=0;iiii<120;iiii++)
{
for(pppp=0;pppp<40;pppp++)
{
LCD_DataWrite(dat1);
}
for(pppp=0;pppp<40;pppp++)
{
LCD_DataWrite(dat2);
}
}
}
/////////////????????±??ò//////////////////////////////////
void display_kuang(void)
{
unsigned int n0,n1;
LCD_Graphic(); //????????????
LCD_GotoXY(0x00,0x00); //?è?¨X,Y×?±ê????
LCD_CmdWrite(0xb0);
for(n0=0;n0<40;n0++)
LCD_DataWrite(0xff);
for(n0=0;n0<(238);n0++)
{
for(n1=0;n1<40;n1++)
{
if (n1==0) LCD_DataWrite(0x80);
else if (n1==39) LCD_DataWrite(0x01);
else LCD_DataWrite(0x00);
}
}
for(n0=0;n0<40;n0++)
LCD_DataWrite(0xff);
}
/////////////?????±í??//////////////////////////////////
void display_biao(void)
{
unsigned int n0,n1;
LCD_Graphic(); //????????????
LCD_GotoXY(0x00,0x00); //?è?¨X,Y×?±ê????
LCD_CmdWrite(0xb0);
for(n0=0;n0<40;n0++)
LCD_DataWrite(0xff);
for(n0=0;n0<31;n0++)
{
for(n1=0;n1<40;n1++)
{
if (n1==0) LCD_DataWrite(0x80);
else if (n1==39) LCD_DataWrite(0x01);
else LCD_DataWrite(0x00);
}
}
for(n0=0;n0<40;n0++)
LCD_DataWrite(0xff);
for(n0=0;n0<(125);n0++)
{
for(n1=0;n1<40;n1++)
{
if (n1==0) LCD_DataWrite(0x80);
else if (n1==39) LCD_DataWrite(0x01);
else LCD_DataWrite(0x00);
}
}
for(n0=0;n0<40;n0++)
LCD_DataWrite(0xff);
}
/////////////????????×?????×?·?////////////////////
void display_word(unsigned char code *cha, int count )
{
unsigned int i =0;
LCD_Text(); //??????±?????
LCD_GotoXY(0x00,0x00); //?è?¨X,Y×?±ê????
LCD_CmdWrite(0xb0);
for( i =0; i < count; i++)
{
LCD_DataWrite(*cha);
++cha;
delay_nms(1);
}
}
/////////////????????×?????×?·?////////////////////
void Dis_CN(unsigned char x, unsigned char y, unsigned char code *cha, int count )
{
unsigned int i =0;
LCD_Text(); //??????±?????
LCD_GotoXY(x,y); //?è?¨X,Y×?±ê????
LCD_CmdWrite(0xb0);
for( i =0; i < count; i++)
{
LCD_DataWrite(*cha);
++cha;
delay_nms(1);
}
}
/////////////?????¨??×?±ê??????×?·???////////////////////
void LCD_ShowStr(unsigned char xxx,unsigned char yyy,unsigned char *text)
{
LCD_Text(); //??????±?????
LCD_GotoXY(xxx,yyy); //?è?¨X,Y×?±ê????
LCD_CmdWrite(0xB0);
while(*text != '\0')
{
LCD_DataWrite(*text);
++text;
delay_nms(1);
}
}
/////////////////////????·?°×????///////////////////////////////////
void reverse_data(void)
{ unsigned char temp;
temp=LCD_CmdRead(0x00); //??WLCR?????÷????
temp |=0x01;
LCD_CmdWrite(0x00);
LCD_DataWrite(temp);
}
/////////////////////????????????///////////////////////////////////
void normal_data(void)
{ unsigned char temp;
temp=LCD_CmdRead(0x00); //??WLCR?????÷????
temp &=0xfe;
LCD_CmdWrite(0x00);
LCD_DataWrite(temp);
}
///***************????·?°×????*****************************
void LCD_Inv(void)
{
unsigned char temp;
temp=LCD_CmdRead(0x10);
temp |=0x20;
LCD_CmdWrite(0x10);
LCD_DataWrite(temp);
}
///***************????????????*****************************
void LCD_NoInv(void)
{
unsigned char temp;
temp=LCD_CmdRead(0x10);
temp &=0xdf;
LCD_CmdWrite(0x10);
LCD_DataWrite(temp);
}
/////////////////////??×?????????///////////////////////////////////
void bold_word(void)
{ unsigned char temp;
temp=LCD_CmdRead(0x10); //??0x10?????÷????
temp |=0x10;
LCD_CmdWrite(0x10);
LCD_DataWrite(temp);
}
/////////////////////??×?·?????????///////////////////////////////////
void no_bold_word(void)
{ unsigned char temp;
temp=LCD_CmdRead(0x10); //??wccr?????÷????
temp &=0xef;
LCD_CmdWrite(0x10);
LCD_DataWrite(temp);
}
/////////////////////×?·?·??ói±?///////////////////////////////////
void enlarge(unsigned char i)
{
switch(i)
{ case 0x01:
LCD_CmdWrite(0xf1);
LCD_DataWrite(0x00);
break;
case 0x02:
LCD_CmdWrite(0xf1);
LCD_DataWrite(0x50);
break;
case 0x03:
LCD_CmdWrite(0xf1);
LCD_DataWrite(0xa0);
break;
case 0x04:
LCD_CmdWrite(0xf1);
LCD_DataWrite(0xf0);
break;
}
}
//******************??????±ê******************
void Open_B(void) //??????±ê
{
unsigned char temp;
temp=LCD_CmdRead(0x10);
temp |=0x56; //??????±ê56
LCD_CmdWrite(0x10);
LCD_DataWrite(temp);
temp=LCD_CmdRead(CHWI);
temp |=0x20; //??±ê????
LCD_CmdWrite(CHWI);
LCD_DataWrite(temp);
temp=LCD_CmdRead( BTMR );
temp |= 0X11; //??????±ê11
LCD_CmdWrite(BTMR);
LCD_DataWrite(temp);
}
//************************************************
//******************??±???±ê******************
void Close_B(void) //??±???±ê
{
unsigned char temp;
temp=LCD_CmdRead(0x10);
temp |=0x52; //??±???±êD4
LCD_CmdWrite(0x10);
LCD_DataWrite(temp);
}
//************************************************
//******************??????±ê******************
void B_X_Y( unsigned char x, unsigned char y ) //??±ê????
{
unsigned char temp;
LCD_GotoXY(x,y);
temp=LCD_CmdRead( CURX );
temp |= x;
LCD_CmdWrite(CURX);
LCD_DataWrite(temp);
temp=LCD_CmdRead( CURY );
temp |= y;
LCD_CmdWrite(CURY);
LCD_DataWrite(temp);
}
|