本文包含原理图、PCB、源代码、封装库、中英文PDF等资源
您需要 登录 才可以下载或查看,没有账号?注册会员
×
帮忙分析一下下面这段程序有哪些错误
#include<reg52.h>
#include<stdio.h>
#define uchar unsigned char
uchar *p,*p1,*p2,*pp; /*建立数组指针*/
uchar q; /*用来判忙*、
uchar data i;
uchar data wbyte;
uchar data column; /*定义列*/
uchar data page; /*定义页*/
sbit E=p3^2; /*读写使能信号,1为有效*/
sbit R_W=p3^1; /*读写片选信号,1为读片选,0为写片选*/
sbit RS=p3^0;
sbit D_I=p3^0; /*数据指针片选信号,1为数据操作,0为写指令或读状态*/
char code hanzi[32]= /*汉字数组*/
{
0x02,0x03 /*笑脸,心*/
0xc9,0xee /*深*/
0xdb,0xda /*圳*/
0xd6,0xc2 /*致*/
0xd2,0xe2 /*意*/
0xb5,0xe7 /*电*/
0xd7,0xd3 /*子*/
0x03,0x02 /*心,笑脸*/
0x54,0x52 /*T,R*/
0x4c,0x3a /*L,:*/
0x30,0x37 /*0,7*/
0x35,0x35 /*5,5*/
0x32,0x37 /*2,7*/
0x38,0x38 /*8,8*/
0x35,0x36 /*5,6*/
0x30,0x31 /*0,1*/
}
char code hanzi1[28]= /*汉字数组*/
{
0xbb,0xb6 /*欢*/
0xd3,0xda /*迎*/
0xc4,0xfa /*您*/
0xa3,0xa1 /*!*/
0x20,0x20 /*空*/
0x20,0x20 /*空*/
0x46,0x41 /*F,A*/
0x58,0x3a /*X,:*/
0x,0x /**/
0x,0x /**/
0x,0x /**/
0x,0x /**/
0x,0x /**/
0x,0x /**/
}
/*-- 调入了一幅图像:C:\Documents and Settings\longs\My Documents\FFOutput\未命名.bmp --*/
/*-- 宽度x高度=24x24 --*/
char code mytu[24][24]=
{
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7E,0xFF,0xFE,0x3C,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
}
uchar data j1=32; /*所建立的第一个汉字数组中元素的个数*/
/*为在液晶中第一行的显示数据*/
uchar data j2=28; /*所建立的第二个汉字数组中元素的个数*/
/*为在液晶中第二行的显示数据*/
uchar data k1=0x80; /* 起始点:80h-8fh为在第一行显示*/
uchar data k2=0x92; /*起始点:90h-9fh为在第二行显示*/
/*************************扩充指令集画图*********************/
uchar data z; /*图形数组的页,为实际点阵行数*/
uchar data y; /*图形数组的列,为实际点阵列数除以8*/
uchar data column; /*起始点设定:为在液晶中显示的实际起始列*/
uchar data page; /*起始点设定:为在液晶中显示的实际起始行*/
/**********************************************************/
void Wcom(uchar); /*写指令*/
void clearlcd(); /*清屏*/
void Imim(); /*初始化*/
void Dat(uchar); /*送数据*/
void delay(); /*延时*/
void hanzi(); /*写汉字*/
void hanzi1(); /*写汉字*/
void MyTU(); /*画图*/
void clearlcdl(); /*在扩充功能下清屏*/
/***************************主程序******************************/
void main()
{
loop:
Imim(); /*初始化*/
p=hanzi; /*指针指向数组的首地址*/
p1=hanzi1;
p2=mytu;
hanzi(); /*写汉字程序*/ /*1 2行*/
hanzi1(); /*2 4行*/
Delay();Delay();Delay();Delay();Delay();Delay();Delay();Delay();Delay();Delay();
Delay();Delay();
clearcd();
z=24; /* 图形数组的页,为实际点阵行数*/
y=24; /*图形数组的列,为实际点阵列数除以8*/
column=5; /*起始点设置:为在液晶中显示的实际起始列,一列占一个汉字*/
page=0; /*起始点设定:为在液晶中显示的实际起始行*/
p2=mytu;
mytu(); /*图形*/
delay();delay();delay();delay();delay();delay();delay();delay();delay();delay();
delay();delay();
goto loop;
}
/*************************写指令子程序************************/
void wcom(uchar d)
{
R_W=1;
D_I=0; /*设置状态*/
Loop:
p1=0xFF;
E=1; /*使能信号有效*/
q=p1; /*将p1口状态读入*/
E=0; /*关闭使能信号*/
if(q&0x80) /*判断屏幕是否忙*/
{
goto loop; /*若忙,继续等待*/
}
R_W=0;
D_I=0; /*写数据指令 */
p1=d; /*将数据送入p1口*/
E=1; /*使能信号开*/
E=0; /* 使能信号关*/
}
/**************************写数据子程序***************************/
void dat(uchar d)
{
R_W=1; /*读状态指令*/
D_I=0;
loop:
p1=0xFF;
E=1; /*使能*/
q=p1;
E=0;
if(q&0x80)
{
goto loop;
} /*判忙*/
D_I=1; /* 送数据指令*/
R_W=0;
p1=d;
E=1; /*使能信号开*/
E=0; /*使能信号关*/
}
/***********************初始化子程序******************************/
void Imim()
{
p0=oxff;
p1=0xff;
p2=0xff;
p3=0xff;
E=0;
delay();
WCOM(0x38); /* 功能设定*/
WCOM(0x08); /*关显示指令*/
WCOM(0x06); /*光标右移*/
Clearlcd(); /*清除*/
WCOM(0x0c); /*开显示指令*/
}
/***************************延时子程序******************************/
void delay()
{
uchar data i,j;
for(i=0;i<255;i++)
for(j=0;j<255;j++)
}
/**************************基本清屏子程序*****************************/
void clearlcd()
{
D_I=0;
R_W=0;
p1=0x01;
WCOM(0x01); /*清除显示*/
}
/**************************写第一行汉字主程序***************************/
void hanzi()
{
WCOM(k); /*设置第一行起始点*/
for(i=0;i<j;i++,p++)
{
wbyte=*p;
dat(wbyte); /*将汉字数组数据送入*/
}
}
/***************************写第二行汉字主程序*****************************/
void hanzi1()
{
WCOM(k1); /*设置第二行起始点*/
for(i=0;i<j1;i++,p1++)
{
wbyte=*p1;
dat(wbyte); /*将汉字数组数据送入*/
}
}
/************************扩充指令集画图子程序*****************************/
void Mytuxing()
{
uchar data v
uchar data w
uchar data x
uchar data h
uchar data Nextpage;
Nextpage=page;
WCOM(0x34); /*功能设定*/
WCOM(0x36); /* 扩充功能设定*/
pp=p2;
pp=pp+12*y*12;
for(h=0;h<z/2;h++) /*页循环*/
{
v=column|0x80;
w=page|0x80;
WCOM(w); /*送入起始页地址*/
wcom(v); /*送入起始列地址*/
page++; /* 准备对下一页进行操作*/
for(x=0;x<y;x++) /* 列循环*/
{
wbyte=*P;
dat(wbyte); /*循环送入图形数据*/
p2++;
}
}
}
/*******************扩充指令集清屏子程序********************/
void clearlcd1()
{
uhcar data disp_page;
uchar data i;
uchar data j;
for(i=0;i<64;i++) /*共32页*/
{
disp_page=i|0x80; /*设置页地址*/
WCOM(disp_page); /* 进入页地址*/
WCOM(0x80); /*送入起始列地址*/
for(j=0;j<32;j++)
{
data(0x00); /*清屏*/
}
}
} |