仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机带注释的源程序如下:
//功能:晶振11.0592M,实现1602液晶显示“88888888”//作者: 康晓龙
//单位:四川机电技术学院
//版本号:1.0
#include<reg51.h>
#include<intrins.h> //包含_npp_函数定义头文件
#define uchar unsigned char
#define uint unsigned int
uchar table[]="0123456789.";
sbit rs=P0^4; //定义 命令/数据输入脚
sbit rw=P0^5; //定义 读/写脚
sbit e=P0^6; //定义使能脚
sbit bf=P1^7;
uchar ge,shi,bai;
uint i;
void delayms(uint xms) // 延时子程序
{
uint i;uchar j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
/**************************************
函数功能:判断忙碌状态
返回值: result. result=0 忙,result=1 不忙。
***************************************/
uchar panduanmanglu(void)
{
bit result;
rs=0;
rw=1;
e=1;
_nop_();
result=bf;
e=0;
return result;
}
/************************************
函数功能:将模式设置指令或显示地址写入液晶模块
参数:canshu
*************************************/
void xiezhiling(uchar canshu)
{
while( panduanmanglu()==1);
rs=0;
rw=0;
e=0;
_nop_();
_nop_();
P1=canshu;
_nop_();
_nop_();
e=1;
_nop_();
_nop_();
e=0;
}
/************************************
函数功能:指定字符显示的实际地址
参数:x
*************************************/
void xiedizhi(uchar x)
{
xiezhiling(x+0x80);
}
/************************************
函数功能:将数据写入液晶模块
参数:y
*************************************/
void xieshujv(uchar y)
{
while( panduanmanglu()==1);
rs=1;
rw=0;
e=0;
P1=y;
_nop_();
_nop_();
e=1;
_nop_();
_nop_();
e=0;
}
/************************************
函数功能:对LCD的显示进行初始化设置
*************************************/
void chushihua()
{
delayms(15);
xiezhiling(0x38); //0011 1000
delayms(5);
xiezhiling(0x0c); //0000 1DCB ,D=1开显示,C=1显示光标,B=1光标闪烁
delayms(5);
xiezhiling(0x04);//0000 01NS ,N=1指针加1,光标加1;N=0指针减1,光标减1;
//S=1当写一个字符时,整屏显示左移(N=1)或右移(N=0),
//以得到光标不移动而屏幕移动的效果;S=0整屏显示不移动
delayms(5);
}
/************************************
函数功能:处理 i的数据
*************************************/
void xainshi(uint i)
{
ge=i%10; //求数码管的个位
shi=i/10%10; //求数码管的十位
bai=i/100%10; //求数码管的百位
}
void main()
{
chushihua();
while(1)
{ i=124;
xainshi(i);
xiedizhi(0x05);//显示的地址在第一行的第6个显示
xieshujv(table[ge]);
xiedizhi(0x06);//显示的地址在第一行的第7个显示
xieshujv(table[10]);
xiedizhi(0x07);//显示的地址在第一行的第8个显示
xieshujv(table[shi]);
xiedizhi(0x08);//显示的地址在第一行的第9个显示
xieshujv(table[bai]);
}
}
全部资料51hei下载地址:
2.0.zip
(268.01 KB, 下载次数: 39)
|