找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2338|回复: 1
收起左侧

适合新手,正在学习LCD1602,单片机程序带注释简洁易懂

[复制链接]
ID:911048 发表于 2021-4-23 21:07 | 显示全部楼层 |阅读模式
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
屏幕截图 2021-04-23 210220.jpg

单片机带注释的源程序如下:
//功能:晶振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)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:674046 发表于 2024-8-22 07:56 | 显示全部楼层
这个程序在板子上运行过吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表