|
|
今天我在擺弄1602的時(shí)候,想讓一組字母從地址0x80+0x10處左移16位,一開(kāi)始我的程序?qū)懞弥螅_(kāi)始運(yùn)行,可是就左移一位就卡住了,只左移了一位,下面是單片機(jī)源程序:
————————————————
#include <reg52.h>
typedef unsigned char uchar;
sbit RS=P2^0;
sbit RW=P2^1;
sbit EN=P2^2;
uchar code table[]="I LOVE YOU";
void read_busy()
{
uchar busy;
P0=0xff;
RS=0;
RW=1;
do
{
EN=1;
busy=P0;
EN=0;
}while(busy&0x80);
}
void write_cmd(uchar cmd)
{
read_busy();
RS=0;
RW=0;
P0=cmd;
EN=1;
EN=0;
}
void write_date(uchar date)
{
read_busy();
RS=1;
RW=0;
P0=date;
EN=1;
EN=0;
}
void delay(int x)
{
char i,j;
for(i=0;i<x;i++)
for(j=0;j<125;j++);
}
void main()
{
uchar i,num;
write_cmd(0x38);//初始化
write_cmd(0x0e);//開(kāi)顯示
write_cmd(0x01);//清屏
write_cmd(0x06);//地址指針加1
write_cmd(0x80+0x00);
for(num=0;num<10;num++)
{
write_date(table[num]);
}
for(i=0;i<16;i++)
{
write_cmd(0x18);
delay(250);
}
while(1);
}
——————————————————
但是之后我檢查了一下好幾遍程序,發(fā)現(xiàn)無(wú)論是初始化,還是讀忙,還是輸入指令,輸入數(shù)據(jù),都沒(méi)有問(wèn)題,
那唯一可能的就是延時(shí)函數(shù)那一塊,于是我看了延時(shí)函數(shù),
void delay(int x)
{
char i,j;
for(i=0;i<x;i++)
for(j=0;j<125;j++);
}
————
發(fā)現(xiàn)我把x定義成int,把i和j定義成char了,然后我把char改成了int,重新燒錄程序,發(fā)現(xiàn)這次程序運(yùn)行正確,
即把函數(shù)改為
void delay(int x)
{
int i,j;
for(i=0;i<x;i++)
for(j=0;j<125;j++);
}
————
之后我又把int改為了char,發(fā)現(xiàn)這次程序運(yùn)行的特別快,幾乎看不到字母移動(dòng)的過(guò)程,
即把函數(shù)改為:
void delay(char x)
{
char i,j;
for(i=0;i<x;i++)
for(j=0;j<125;j++);
}
然而之后我又把函數(shù)改為
void delay(int x)
{
unsigned char i,j;
for(i=0;i<x;i++)
for(j=0;j<125;j++);
}
發(fā)現(xiàn)程序竟然還可以正常運(yùn)行,
請(qǐng)各位大佬幫忙解惑,以前從來(lái)沒(méi)有關(guān)注過(guò)這個(gè)問(wèn)題
|
-
這是剛開(kāi)始的時(shí)候的運(yùn)行結(jié)果
-
-
video_20191104_210240.zip
2019-11-4 21:08 上傳
點(diǎn)擊文件名下載附件
6.14 MB, 下載次數(shù): 3
這是把延時(shí)函數(shù)中的char改為int之后1602運(yùn)行的過(guò)程
-
-
video_20191104_211138.zip
2019-11-4 21:13 上傳
點(diǎn)擊文件名下載附件
5.18 MB, 下載次數(shù): 2
這是把延時(shí)函數(shù)中的int改為char后1602顯示的過(guò)程
|