我今天做一個STC12C5A60S2單片機的動態內存申請程序:
#include"STC12C5A60S2.H"
#include"STDLIB.H"
#include"STRING.H"
#define ON_LCD 0x0C
#define OFF_LCD 0x08
#define CLEAR_LCD 0x01
#define INPUT_MODE 0x06
#define TEXT_SIZE 0x38 //8位,2行,5*7點陣
sbit RS=P2^5;
sbit RW=P2^6;
sbit E=P2^7;
sbit Back_Light=P4^5;
sbit feleer=P2^0; //探針
unsigned char code Text[]="DRAM_ASK_TEST";
unsigned char code Date[]="2020-02-11";
void Init_LCD();
void Display(unsigned char *ptr,unsigned char x,unsigned char y);
void Set_xy(unsigned char x,unsigned char y);
void Wcom(unsigned char com);
void WDat(unsigned char Dat);
void Ready();
void main()
{
unsigned char xdata *Area;
P4SW=0xFF;
Back_Light=0;
Init_LCD();
init_mempool(0x200,14);
Area=(unsigned char *)malloc(14*sizeof(unsigned char));
if(Area==NULL)
{
feleer=0;
while(1);
}
strcpy(Area,Text);
Display(Area,2,1);
Display(Date,3,2);
free(Area);
while(1);
}
void Init_LCD()
{
Wcom(OFF_LCD);
Wcom(CLEAR_LCD);
Wcom(INPUT_MODE);
Wcom(ON_LCD);
Wcom(TEXT_SIZE);
}
void Display(unsigned char *ptr,unsigned char x,unsigned char y)
{
Set_xy(x,y);
while(*ptr!=0)
{
WDat(*ptr);
ptr++;
}
}
void Set_xy(unsigned char x,unsigned char y)
{
if(y==1)
{
Wcom(0x80|x);
}
if(y==2)
{
Wcom(0xC0|x);
}
}
void Wcom(unsigned char com)
{
Ready();
RS=0;
RW=0;
E=1;
P0=com;
E=0;
}
void WDat(unsigned char Dat)
{
Ready();
RS=1;
RW=0;
E=1;
P0=Dat;
E=0;
}
void Ready()
{
unsigned char sta;
P0=0xFF;
RS=0;
RW=1;
do
{
E=1;
sta=P0;
E=0;
}
while(sta&0x80);
}
調試了一下午好多問題都解決了,就是下面這個警告還在,1602沒顯示,我的書本沒有initreg()這個庫函數的說明,網上也沒見有,(有都是說C++的),想問一下用過這種功能的師傅,怎樣才能消除這個警告?
2020-02-11_184242.png (19.35 KB, 下載次數: 20)
下載附件
2020-2-11 18:43 上傳
|