程序下载之后:
电路:
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit RS = P3^6; //LCD12864寄存器选择位
sbit RW = P3^7; //LCD12864读写控制口
sbit SCLK = P3^4; //LCD12864使能控制口
//************************延时************************//
void delayms(uint x) //延时程序
{
uint m,n;
for(m=0;m<x;m++)
for(n=0;n<110;n++);
}
//********************LCD12864模块**********************//
void write_cmd(uchar zhiling) //写指令
{
RS = 0;
RW = 0; //同时为0,可写入指令
SCLK = 0; //E从0跳变到1,进行写指令
delayms(5);
P2 = zhiling; //数据送入P2,写入指令
delayms(5);
SCLK = 1; //E从0跳变到1,进行写指令
delayms(5);
SCLK = 0; //E从1跳到0,LCD开始执行命令
}
void write_data(uchar shuju) //写数据
{
RS = 1;
RW = 0; //写入数据
SCLK = 0;
delayms(5);
P2 = shuju; //数据写入LCD
delayms(5);
SCLK = 1;
delayms(5);
SCLK = 0; //LCD开始执行命令
}
void LCD_init() //LCD初始化
{
write_cmd(0x30); //设置8位并行口,基本指令集
delayms(10);
write_cmd(0x30); //再次设置
delayms(10);
write_cmd(0x0c); //显示开,光标关
delayms(10);
write_cmd(0x01); //清除LCD显示
delayms(10);
}
void LCDPos(uchar x,uchar y) //定义LCD显示地址
{
uchar pos;
if(x == 1) //第一行
{
x = 0x80;
}else if(x == 2) //第二行
{
x = 0x90;
}else if(x == 3) //第三行
{
x = 0x88;
}else if(x == 4) //第四行
{
x = 0x98;
}
pos = x + y - 1;
write_cmd(pos);
}
void write_str(unsigned char *str) //显示数组
{
while(*str != "")
{
write_data(*str++);
delayms(5);
}
}
void LCD_display() //LCD显示
{
while(1)
{
LCDPos(1,1); //第一行显示
write_str("速度:");
delayms(10);
LCDPos(2,1); //第二行显示
write_str("里程:");
delayms(10);
LCDPos(3,1); //第三行显示
write_str("热量消耗:");
delayms(10);
LCDPos(4,1); //第四行显示
write_str("骑行时间:");
delayms(500);
}
}
//**************************主函数************************//
void main()
{
LCD_init();
delayms(10);
TMOD = 0x01; //设置定时器工作方式1
EA = 1; //开总中断
ET0 = 1; //开T1定时器0中断
TR0 = 1; //开定时器0
while(1);
}
//*************************中断**************************//
void EX0_INT(void) interrupt 1
{
LCD_display();
}