|
本帖最后由 codenew 于 2014-9-16 20:44 編輯
一開始時(shí),編譯提示*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS兩個(gè)警告,主要是有兩函數(shù)沒有被調(diào)用。這兩個(gè)函數(shù)是void delays(uint x)和void init1602()。
我把void delays(uint x)和void init1602()這兩個(gè)函數(shù)去掉,重新編譯,提示0錯(cuò)誤,0警告了。重新刷芯片,上電運(yùn)行,可正常顯示123456789ABCDEFG這十六個(gè)字符了。我不明白,為什么保留上面哪兩個(gè)函數(shù)就顯示不正常的?照理沒調(diào)用應(yīng)不影響的。
正常顯示123456789ABCDEFG的程序如下:
#include<reg51.h>
#include<intrins.h>
typedef unsigned char uchar;
typedef unsigned char uint;
unsigned char code table[]= {"Temp wireless "};
unsigned char code table1[]={"Temp: "};
unsigned char code shuzi[]={"123456789ABCDEFG"};
unsigned char num;
sbit BEEP=P3^6; //蜂鳴器定義引腳IO口
sbit rs=P3^3;//LCD數(shù)據(jù)/命令選擇端(H/L)
sbit rw=P3^4;//LCD讀/寫選擇端(H/L)
sbit en=P3^5;//LCD使能控制
/*******************************************************************************
以下是對(duì)液晶模塊的操作程序
*******************************************************************************/
/***********1602液晶顯示部分子程序****************/
void ready()
{
P0=0xff;
rs=0; //RS(H/L),低電平選擇命令
rw=1; //RW(H/L),讀操作
en=1;
while(P0&0x80); //當(dāng)為0時(shí)表示不忙,退出循環(huán)。
en=0;
}
void write_com(uchar com)
{
ready();
rs=0;//命令
rw=0;
P0=com;
en=1;//ready()執(zhí)行完后,en為0。形成高脈沖,表示可對(duì)液晶讀寫。
en=0;
}
void write_date(uchar date)
{
ready();
rs=1;//數(shù)據(jù)
rw=0;
P0=date;
en=1;//ready()執(zhí)行完后,en為0。形成高脈沖,表示可對(duì)液晶讀寫。
en=0;
}
/**************************************************
函數(shù)功能:主函數(shù)
***************************************************/
void main(void)
{
BEEP=1; //禁止蜂鳴器
en=0;
P0=0xff;
write_com(0x38); //設(shè)置工作方式
write_com(0x0c); //設(shè)置光標(biāo)
write_com(0x06); //設(shè)置輸入方式
write_com(0x01); //清屏
write_com(0x80);
for(num=0;num<16;num++)
{
write_date(shuzi[num]);
}
while(1);
}
|
|