本人菜鸟一枚,刚开始接触stm32,最近要移植一个51的12864程序到原子哥的mini板上,弄了快一周了,还是没成功,现在我都怀疑,自己是不是真的不是这块料啊。现在真心希望能有个大手稍微指导一下,自己实在是憋不出来啊。这是我的51程序。汉字的显示是用数组,因为液晶没有字库,只能这样了,声明:这个程序在51上是ok的,求大神指导一下下,等等,是串行!
#include <reg51.H>
#include <intrins.h>
sbit lcd_rs=P3^2;
sbit lcd_sclk=P3^1; //D6?±??TXD
sbit lcd_sid=P3^0; //D7????RXD
sbit lcd_reset=P1^0;
sbit lcd_cs1=P1^1;
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
uchar code qing[]={
0x40,0x42,0xCC,0x00,0x00,0x44,0x54,0x54,0x54,0x7F,0x54,0x54,0x54,0x44,0x40,0x00,
0x00,0x00,0x7F,0x20,0x10,0x00,0xFF,0x15,0x15,0x15,0x55,0x95,0x7F,0x00,0x00,0x00};
uchar code shu[]={
0x88,0x68,0x1F,0xC8,0x08,0x10,0xC8,0x54,0x52,0xD1,0x12,0x94,0x08,0xD0,0x10,0x00,
0x09,0x19,0x09,0xFF,0x05,0x00,0xFF,0x12,0x92,0xFF,0x00,0x5F,0x80,0x7F,0x00,0x00};
uchar code ru[]={
0x00,0x00,0x00,0x00,0x00,0x01,0xE2,0x1C,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x80,0x40,0x20,0x10,0x0C,0x03,0x00,0x00,0x00,0x03,0x0C,0x30,0x40,0x80,0x80,0x00};
uchar code mi[]={
0x10,0x8C,0x44,0x04,0xE4,0x04,0x95,0xA6,0x44,0x24,0x14,0x84,0x44,0x94,0x0C,0x00,
0x02,0x02,0x7A,0x41,0x41,0x43,0x42,0x7E,0x42,0x42,0x42,0x43,0xF8,0x00,0x00,0x00};
uchar code ma[]={
0x04,0x84,0xE4,0x5C,0x44,0xC4,0x00,0x02,0xF2,0x82,0x82,0x82,0xFE,0x80,0x80,0x00,
0x02,0x01,0x7F,0x10,0x10,0x3F,0x00,0x08,0x08,0x08,0x08,0x48,0x88,0x40,0x3F,0x00};
uchar code maohao[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x36,0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
void transfer_command_lcd(int data1)//??????
{
char i;
lcd_rs=0;
for(i=0;i<8;i++)
{
lcd_sclk=0;
if(data1&0x80) lcd_sid=1;
else lcd_sid=0;
lcd_sclk=1;
data1=data1<<=1;
}
}
void transfer_data_lcd(int data1)//??????
{
char i;
lcd_rs=1;
for(i=0;i<8;i++)
{
lcd_sclk=0;
if(data1&0x80) lcd_sid=1;
else lcd_sid=0;
lcd_sclk=1;
data1=data1<<=1;
}
}
void delay(int i)//???±????
{
int j,k;
for(j=0;j<i;j++)
for(k=0;k<500;k++);
}
/*LCD??????*/
void initial_lcd()
{
lcd_cs1=0;
lcd_reset=0;
delay(20);
lcd_reset=1;
delay(20);
transfer_command_lcd(0xe2);
delay(5);
transfer_command_lcd(0x2c);
delay(5);
transfer_command_lcd(0x2e);
delay(5);
transfer_command_lcd(0x2f);
delay(5);
transfer_command_lcd(0x24);
transfer_command_lcd(0x81);
transfer_command_lcd(0x1a);
transfer_command_lcd(0xa2);
transfer_command_lcd(0xc8);
transfer_command_lcd(0xa0);
transfer_command_lcd(0x60);
transfer_command_lcd(0xaf);
lcd_cs1=1;
}
/*????????*/
void clear_screen()
{
unsigned char i,j;
lcd_cs1=0;
for(i=0;i<9;i++)
{
transfer_command_lcd(0xb0+i);
transfer_command_lcd(0x10);
transfer_command_lcd(0x00);
for(j=0;j<132;j++)
{
transfer_data_lcd(0x00);
}
}
lcd_cs1=1;
}
void display_graphic_16x16(uint page,uint column,uchar *dp)//????×?·???????
{
uint i,j;
uchar page_address;
uchar column_address_L,column_address_H;
page_address = 0xb0+page-1;
column_address_L =column&0x0f;
column_address_H =((column>>4)&0x0f)+0x10;
lcd_cs1=0;
for(j=0;j<2;j++)
{
transfer_command_lcd(page_address+j);
transfer_command_lcd(column_address_H);
transfer_command_lcd(column_address_L);
for (i=0;i<16;i++)
{
transfer_data_lcd(*dp);
dp++;
}
}
lcd_cs1=1;
}
void main(void)
{
initial_lcd();
while(1)
{
clear_screen();
while(1)
{
display_graphic_16x16(3,20,qing);
display_graphic_16x16(3,37,shu);
display_graphic_16x16(3,53,ru);
display_graphic_16x16(3,69,mi);
display_graphic_16x16(3,85,ma);
display_graphic_16x16(3,101,maohao);
}
}
}
|