- 打卡等级:以坛为家I
- 打卡总天数:220
- 最近打卡:2025-05-01 18:20:12
金牌会员
- 积分
- 1132
|
1.第一步:当然是修改要包含的文件。
89c51:
#include <reg52.h>
#include <string.h>
stc32:
#include "./comm/STC32G.H"
2.第二步:修改影响延时的地方(工程属性,烧写设置)。
89c51:
#define MAIN_Fosc 12000000L
stc32:
#define MAIN_Fosc 24000000L
3. 删掉stc32的端口模式设置,89c51不需要。
备注:第二步非常重要。
以下是搬到89c51上的lcd12864例子:
#include <reg52.h>
#include <string.h>
#define MAIN_Fosc 12000000L //?????
typedef unsigned char u8;
typedef unsigned int u16;
typedef unsigned long u32;
/*
* RS: H->Data; L->Cmd
* RW: H->Read; L->Write
*
* Chip Select : L->Valid
* LCD_SI_CS PIN_RS
*
* Data : H-> ; L->
* LCD_SI_SID PIN_RW
*
* Clock : H-> ; L->
* LCD_SI_SCLK PIN_EN
*/
#define LCD_Data P2
sbit LCD_RS = P0^0; //????
sbit LCD_RW = P0^1;
sbit LCD_E = P0^2;
sbit PSB = P3^0; //
sbit LCD_RESET = P3^1; // 17---RESET L-->Enable
#define LCD12864_SID LCD_RW
#define LCD12864_SCLK LCD_E
#define Busy 0x80 //????LCD?????Busy??
#define Write_Command 0xf8
#define Write_Data 0xfa
#define Read_Command 0xfc
#define Read_Data 0xfe
#define Setting_Basic_Instruction_Set 0x30
#define Setting_Extended_Instruction_Set_Drawing_Off 0x34
#define Setting_Extended_Instruction_Set_Drawing_On 0x36
#define Clear_Display 0x01
#define Entry_Mode_Cursor_Left 0x04
#define Entry_Mode_Entire_Right 0x05
#define Entry_Mode_Cursor_Right 0x06
#define Entry_Mode_Entire_Left 0x07
#define Display_Off 0x08
#define Display_On_Cursor_Off_Inverse_Off 0x0c
#define Display_On_Cursor_Off_Inverse_On 0x0d
#define Display_On_Cursor_On_Inverse_Off 0x0e
#define Display_On_Cursor_On_Inverse_On 0x0f
#define Cursor_Move_Left 0x10
#define Cursor_Move_Right 0x14
#define Display_Move_Left 0x18
#define Display_Move_Right 0x1c
#if 1
void delayms(unsigned int n) //n*10ms
{
unsigned int i,j;
for(i=0; i<n; i++)
for(j=0; j<2000; j++);
}
void delay(unsigned int m) //m*50us
{
unsigned int i,j;
for(i=0; i<m; i++)
for(j=0; j<10; j++);
}
void Delay_10us()
{
unsigned int i,j;
for(i=0; i<1; i++)
for(j=0; j<2; j++);
}
void Delay_x10us(u16 tm)
{
u16 i = tm;
do {
Delay_10us(); //14T per loop
} while(--i);
}
void Delay_10ms()
{
delayms(1);
}
void Delay_x10ms(unsigned int n)
{
delayms(n);
}
#else
void Delay_10us()
{
u32 i;
u16 us = 10;
do {
i = MAIN_Fosc / 13;
while(--i) ; //14T per loop
} while(--us);
}
void Delay_x10us(u16 tm)
{
u16 i = tm;
do {
Delay_10us(); //14T per loop
} while(--i);
}
void Delay_10ms()
{
u16 i;
u16 ms = 10;
do {
i = MAIN_Fosc / 1300;
while(--i) ; //14T per loop
} while(--i);
}
void Delay_x10ms(u16 tm)
{
u16 i = tm;
do {
Delay_10ms(); //14T per loop
} while(--i);
}
#endif
/*----------------------------?1???????----------------------------*/
void LCD12864_Write_Byte(unsigned char temp)
{
unsigned char i;
for(i=0; i<8; i++) {
if((temp<<i)&0x80)
LCD12864_SID=1;
else
LCD12864_SID=0;
LCD12864_SCLK=0;
LCD12864_SCLK=1;
}
}
/*----------------------------????????----------------------------*/
void LCD12864_Write(unsigned char Command,unsigned char temp)
{
LCD12864_Write_Byte(Command);
LCD12864_Write_Byte(temp&0xf0);
LCD12864_Write_Byte((temp<<4)&0xf0);
}
/*----------------------------??GDRAM----------------------------*/
void Clear_GDRAM(void)
{
unsigned char i,j,k;
LCD12864_Write(Write_Command,Setting_Extended_Instruction_Set_Drawing_Off);
k=0x80;
for(i=0; i<32; i++) {
LCD12864_Write(Write_Command,k++);
LCD12864_Write(Write_Command,0x80);
for(j=0; j<16; j++) {
LCD12864_Write(Write_Data,0x00);
}
}
k=0x80;
for(i=0; i<32; i++) {
LCD12864_Write(Write_Command,k++);
LCD12864_Write(Write_Command,0x88);
for(j=0; j<16; j++) {
LCD12864_Write(Write_Data,0x00);
}
}
LCD12864_Write(Write_Command,Setting_Extended_Instruction_Set_Drawing_On);
}
/*----------------------------??????----------------------------*/
void Display_Text(unsigned char code *addr)
{
unsigned char i;
LCD12864_Write(Write_Command,Setting_Basic_Instruction_Set);
LCD12864_Write(Write_Command,0x80); //??DDRAM??
Delay_10us();
for(i=0; i<16; i++) {
LCD12864_Write(Write_Data,*addr);
addr++;
}
LCD12864_Write(Write_Command,0x90); //??DDRAM??
Delay_10us();
for(i=0; i<16; i++) {
LCD12864_Write(Write_Data,*addr);
addr++;
}
LCD12864_Write(Write_Command,0x88); //??DDRAM??
Delay_10us();
for(i=0; i<16; i++) {
LCD12864_Write(Write_Data,*addr);
addr++;
}
LCD12864_Write(Write_Command,0x98); //??DDRAM??
Delay_10us();
for(i=0; i<16; i++) {
LCD12864_Write(Write_Data,*addr);
addr++;
}
}
/*----------------------------????????----------------------------*/
void Display_Data(unsigned char x,unsigned char y,unsigned char Data1,unsigned char Data2)
{
LCD12864_Write(Write_Command,Setting_Basic_Instruction_Set);
switch(y) {
case 0:
LCD12864_Write(Write_Command,0x80+x); //??DDRAM??
Delay_10us();
LCD12864_Write(Write_Data,Data1);
LCD12864_Write(Write_Data,Data2);
break;
case 1:
LCD12864_Write(Write_Command,0x90+x); //??DDRAM??
Delay_10us();
LCD12864_Write(Write_Data,Data1);
LCD12864_Write(Write_Data,Data2);
break;
case 2:
LCD12864_Write(Write_Command,0x88+x); //??DDRAM??
Delay_10us();
LCD12864_Write(Write_Data,Data1);
LCD12864_Write(Write_Data,Data2);
break;
case 3:
LCD12864_Write(Write_Command,0x98+x); //??DDRAM??
Delay_10us();
LCD12864_Write(Write_Data,Data1);
LCD12864_Write(Write_Data,Data2);
break;
}
}
/*----------------------------???12864----------------------------*/
void LCD12864_Init(void)
{
P2 = 0;
LCD_RS = 1;
PSB = 0;
LCD_RESET = 1;
Delay_x10ms(4); //40mS??
LCD12864_Write(Write_Command,Setting_Basic_Instruction_Set);
Delay_x10us(10); //100uS??
LCD12864_Write(Write_Command,Setting_Basic_Instruction_Set);
Delay_x10us(4); //40uS??
LCD12864_Write(Write_Command,Clear_Display); //??????????
Delay_x10us(10); //100uS??
LCD12864_Write(Write_Command,Clear_Display); //????
Delay_x10ms(1); //10mS??
LCD12864_Write(Write_Command,Entry_Mode_Cursor_Right); //??????
Delay_x10us(10); //100uS??
LCD12864_Write(Write_Command,Display_On_Cursor_Off_Inverse_Off); //???,???,?????
Delay_x10us(10); //100uS??
Clear_GDRAM(); //??GDRAM
Delay_x10us(10); //100uS??
}
unsigned char code LCD_STR[] = {"HELLO"};
void main(void)
{
/*
P0M1 = 0x00;
P0M0 = 0x00; //???????
P1M1 = 0x00;
P1M0 = 0x00; //???????
P2M1 = 0x00;
P2M0 = 0x00; //???????
P3M1 = 0x00;
P3M0 = 0x00; //???????
P4M1 = 0x00;
P4M0 = 0x00; //???????
P5M1 = 0x00;
P5M0 = 0x00; //???????
P6M1 = 0x00;
P6M0 = 0x00; //???????
P7M1 = 0x00;
P7M0 = 0x00; //???????
*/
LCD12864_Init(); //LCM???
Delay_x10ms(5); //????(???)
while(1) {
Display_Text(LCD_STR);
}
}
|
|