我们从2011年坚守至今,只想做纯粹的技术论坛,请不要发布和技术无关的话题。  本站有两万多份高大上的PCB和原理图下载,每日更新中,欢迎常回来看看

 找回密码
 立即注册
搜索
查看: 655|回复: 10

51单片机加LCD1602显示名字

[复制链接]

8

主题

8

回帖

21

积分

一级逆天

积分
21

终身成就奖

发表于 2023-12-20 16:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区

您需要 登录 才可以下载或查看,没有账号?立即注册

×
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit LCD_RS=P2^6;
sbit LCD_RW=P2^5;
sbit LCD_E=P2^7;
#define LCD_DataPort P0
uchar i=0;
uint cnt=0;
void LCD_Delay()        //@12.000MHz  1ms 如果是更快的单片机,这里延时要长一点
{
    unsigned char i, j;
    i = 2;
    j = 239;
    do
    {
        while (--j);
    } while (--i);
}
void LCD_WriteCommand(unsigned char Command);
void LCD_Init(void);
void LCD_SetCursor(unsigned char Line,unsigned char Column);
void LCD_ShowChar(unsigned char Line,unsigned char Column,unsigned char Char);
void LCD_ShowString(unsigned char Line,unsigned char Column,unsigned char String[]);
int LCD_Pow(int X,int Y);
void LCD_ShowNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length);
void main()
{
    TMOD = 0x01;
    TH0 = (65536-10000)/256;
    TL0 = (65536-10000)%256;
    TR0 = 1;
    ET0=1;
    EA=1;
    LCD_Init();
    LCD_ShowChar(1,1,"d");
//    LCD_ShowNum(1,4,2042810138,10);
    while(1)
    {
        
    }
}

void LED_Screen_Display() interrupt 1
{
     TH0 = (65536-10000)/256;
    TL0 = (65536-10000)%256;
    cnt++;
    if(cnt>=100)
    {
        cnt=0;
    }

}

/**
  * @brief  LCD1602写命令
  * @param  Command 要写入的命令
  * @retval 无
  */
void LCD_WriteCommand(unsigned char Command)
{
    LCD_RS=0;//写指令
    LCD_RW=0;
    LCD_DataPort=Command;
    LCD_E=1;//这里置高又置低,高电平速度太快,反应不过来,因此进行延时
    LCD_Delay();
    LCD_E=0;
    LCD_Delay();
}

/**
  * @brief  LCD1602写数据
  * @param  Data 要写入的数据
  * @retval 无
  */
void LCD_WriteData(unsigned char Data)
{
    LCD_RS=1;//写数据
    LCD_RW=0;
    LCD_DataPort=Data;
    LCD_E=1;//这里置高又置低,高电平速度太快,反应不过来,因此进行延时
    LCD_Delay();
    LCD_E=0;
    LCD_Delay();
   
}

/**
  * @brief  LCD1602初始化函数
  * @param  无
  * @retval 无
  */
void LCD_Init(void)
{
    LCD_WriteCommand(0x38);//八位数据接口,两行显示,5*7点阵
    LCD_WriteCommand(0x0C);//显示开,光标关,闪烁关
    LCD_WriteCommand(0x06);//数据读写操作后,光标自动加一,画面不动
    LCD_WriteCommand(0x01);//清屏

}

/**
  * @brief  LCD1602设置光标位置
  * @param  Line 行位置,范围:1~2
  * @param  Column 列位置,范围:1~16
  * @retval 无
  */
void LCD_SetCursor(unsigned char Line,unsigned char Column)
{
    if(Line==1)
    {
        LCD_WriteCommand(0x80|(Column-1));//0x80是确定光标位置的指令,A0-A6是确定地址
    }
    else
    {
        LCD_WriteCommand(0x80|(Column-1)+0x40);//换行所以要加一个基地址0x40
    }   
}

/**
  * @brief  在LCD1602指定位置上显示一个字符
  * @param  Line 行位置,范围:1~2
  * @param  Column 列位置,范围:1~16
  * @param  Char 要显示的字符
  * @retval 无
  */
void LCD_ShowChar(unsigned char Line,unsigned char Column,unsigned char Char)
{
  LCD_SetCursor(Line,Column);
    LCD_WriteData(Char);       //char x='A';(等效于char x=0x41;)
}

/**
  * @brief  在LCD1602指定位置开始显示所给字符串
  * @param  Line 起始行位置,范围:1~2
  * @param  Column 起始列位置,范围:1~16
  * @param  String 要显示的字符串
  * @retval 无
  */
void LCD_ShowString(unsigned char Line,unsigned char Column,unsigned char String[])
{
    //这里用到指针的作用,String[]指针指向该字符组的第一个地址,依次显示出来,直到'\0'的出现
    unsigned char i;
  LCD_SetCursor(Line,Column);
    for(i=0;String!='\0';i++)
    {
        LCD_WriteData(String);
    }
}

/**
  * @brief  返回值=X的Y次方
  */
int LCD_Pow(int X,int Y)//x的y次方
{
    unsigned char i;
    int Result=1;
    for(i=0;i<Y;i++)
    {
        Result*=X;
    }
    return Result;
}
/**
  * @brief  在LCD1602指定位置开始显示所给数字
  * @param  Line 起始行位置,范围:1~2
  * @param  Column 起始列位置,范围:1~16
  * @param  Number 要显示的数字,范围:0~65535
  * @param  Length 要显示数字的长度,范围:1~5
  * @retval 无
  */
void LCD_ShowNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length)
{
    unsigned char i;
  LCD_SetCursor(Line,Column);
    //根据长度确定所要显示的位数,通过计算将Number中从高位到低位依次显示出来,对照ASCII码表0的基地址
    //为0x30,显示几就在这个地址上加几就可以
    for(i=Length;i>0;i--)
    {
        LCD_WriteData(0x30+Number/LCD_Pow(10,i-1)%10);//将数字转化为ASCII码表
    }
}
  • 打卡等级:初入少年
  • 打卡总天数:2
  • 打卡月天数:0
  • 打卡总奖励:8
  • 最近打卡:2025-05-12 11:44:10

1

主题

109

回帖

182

积分

二级逆天

积分
182

终身成就奖原创先锋奖

发表于 2023-12-20 23:03 | 显示全部楼层
真好,真可以啊这个。
回复

使用道具 举报

  • 打卡等级:以坛为家III
  • 打卡总天数:566
  • 打卡月天数:9
  • 打卡总奖励:1684
  • 最近打卡:2026-11-13 09:23:17

43

主题

1万

回帖

7万

积分

三级逆天

积分
75311

终身成就奖特殊贡献奖原创先锋奖社区居民忠实会员社区劳模最爱沙发社区明星原创达人优秀斑竹奖宣传大使奖

QQ
发表于 2023-12-21 06:17 | 显示全部楼层
回复

使用道具 举报

  • 打卡等级:以坛为家II
  • 打卡总天数:248
  • 打卡月天数:0
  • 打卡总奖励:911
  • 最近打卡:2025-11-20 08:28:19

9

主题

928

回帖

2308

积分

二级逆天

积分
2308

终身成就奖特殊贡献奖原创先锋奖

发表于 2023-12-21 08:19 | 显示全部楼层
回复

使用道具 举报

  • 打卡等级:以坛为家II
  • 打卡总天数:306
  • 打卡月天数:0
  • 打卡总奖励:1099
  • 最近打卡:2026-09-10 17:29:20

75

主题

2825

回帖

7954

积分

二级逆天

积分
7954

社区居民忠实会员社区劳模终身成就奖社区明星宣传大使奖优秀斑竹奖特殊贡献奖原创先锋奖

QQ
发表于 2023-12-21 08:26 | 显示全部楼层
回复

使用道具 举报

2

主题

119

回帖

186

积分

二级逆天

积分
186

终身成就奖

发表于 2023-12-21 08:51 | 显示全部楼层
回复

使用道具 举报

  • 打卡等级:初入少年
  • 打卡总天数:6
  • 打卡月天数:0
  • 打卡总奖励:26
  • 最近打卡:2025-09-25 16:45:41

1

主题

2516

回帖

3625

积分

二级逆天

积分
3625

终身成就奖特殊贡献奖原创先锋奖优秀斑竹奖

发表于 2023-12-21 08:56 | 显示全部楼层
回复

使用道具 举报

  • 打卡等级:以坛为家II
  • 打卡总天数:253
  • 打卡月天数:0
  • 打卡总奖励:879
  • 最近打卡:2026-05-13 11:19:18

51

主题

2064

回帖

5239

积分

二级逆天

积分
5239

终身成就奖特殊贡献奖原创先锋奖优秀斑竹奖

QQ
发表于 2023-12-21 08:56 | 显示全部楼层
回复

使用道具 举报

  • 打卡等级:以坛为家II
  • 打卡总天数:228
  • 打卡月天数:0
  • 打卡总奖励:821
  • 最近打卡:2026-04-22 09:32:28

0

主题

400

回帖

1693

积分

二级逆天

积分
1693

终身成就奖特殊贡献奖

发表于 2023-12-21 08:56 | 显示全部楼层
回复

使用道具 举报

  • 打卡等级:以坛为家II
  • 打卡总天数:253
  • 打卡月天数:0
  • 打卡总奖励:879
  • 最近打卡:2026-05-13 11:19:18

51

主题

2064

回帖

5239

积分

二级逆天

积分
5239

终身成就奖特殊贡献奖原创先锋奖优秀斑竹奖

QQ
发表于 2023-12-21 08:56 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则

Copyright ©2011-2024 NTpcb.com All Right Reserved.  Powered by Discuz! (NTpcb)

本站信息均由会员发表,不代表NTpcb立场,如侵犯了您的权利请举报投诉

本站所有资料仅限参考学习交流,PCB原理图源码等所有资料不保证准确没问题,请不要用作生产。否则后果自负。

闽公网安备35062302000276号 | 闽ICP备2024076463号-1 | 论坛技术支持QQ群171867948 | 论坛问题,充值问题请联系QQ1308068381

平平安安
TOP
快速回复 返回顶部 返回列表