如下程序,烧进去之后液晶屏只显示一行的小方块,本人是从51开始入门的,最近才接触C8051F,所以各位帮我看看是程序的初始化有问题还是时序有问题,先谢谢大家了
#include<c8051f020.h>
#define uchar unsigned char
#define uint unsigned int
sbit RS=P3^3;
sbit RW=P3^2;
sbit E=P3^1;
void delayxs(uint x);
void PORT_Init (void);
void w_dat(uchar dar);
void SYSCLK_Init (void);
void w_dat(uchar dar);
void w_cmd(uchar cmd);
void lcd_init(void);
void w_string(uchar addr_start,uchar*p);
uchar code L1[]={"SCTbc"}; //第一行16个字符
uchar code L2[]={"ling xu"}; //第二行16个字符
void delayxs(uint x )
{
while(x--);
}
void PORT_Init (void)//端口初始化
{
XBR2 = 0x40; // 使能数据交叉开关和弱上拉
P3MDOUT = 0xff;
P74OUT = 0xC0;
}
void SYSCLK_Init (void)//系统时钟
{
OSCICN = 0x96; // 内部振荡器频率按照 IFCN位指定的速度运行。选择内部振荡器作为系统时钟。内部振荡器使能。内部振荡器典型频率为 P123
OSCXCN = 0x00;
}
void w_dat(uchar dar)
{
P7 = dar;
RS = 1;
RW = 0;
E = 0;
delayxs(200);
E = 1;
}
void w_cmd(uchar cmd)
{
P7 = cmd;
RS=0;
RW=0;
E=0;
delayxs(200);
E=1;
}
void lcd_init(void)
{
w_cmd(0x01);
w_cmd(0x38);
w_cmd(0x0f);
w_cmd(0x06);
}
void w_string(uchar addr_start,uchar*p)
{
w_cmd(addr_start);
while(*p !=' ')
{
w_dat(*p++);
}
}
main()
{
lcd_init(); // 对lcd初始化
PORT_Init();
SYSCLK_Init();
WDTCN=0xde;//看门狗关
WDTCN=0xad;
w_string(0x80,L1);
w_string(0xc0,L2);
while(1);
}
一周热门 更多>