历史上的今天
返回首页

历史上的今天

今天是:2024年08月27日(星期二)

正在发生

2021年08月27日 | 51单片机-液晶屏代码单独文件

2021-08-27 来源:eefocus

同样我们创建好“lcd.c”和“lcd.h”,然后添加进工程文件中。“lcd.c”的代码集合了所有宋老师为我们写好的各种常用函数。


1.lcd.c的代码


#include

#include

 

/* 等待液晶准备好 */

void LcdWaitReady()

{

    unsigned char sta;

   

    LCD1602_DB = 0xFF;

    LCD1602_RS = 0;

    LCD1602_RW = 1;

    do {

          LCD1602_E = 1;

          sta = LCD1602_DB;//读取状态字

          LCD1602_E = 0;

    } while (sta & 0x80);  //bit7等于1表示液晶正忙,重复检测直到其等于0为止

}

 

/* 向LCD1602液晶写入一字节命令,cmd-待写入命令值 */

void LcdWriteCmd(unsigned char cmd)

{

    LcdWaitReady();

    LCD1602_RS = 0;

    LCD1602_RW = 0;

    LCD1602_DB = cmd;

    LCD1602_E  = 1;

    LCD1602_E  = 0;

}

 

/* 向LCD1602液晶写入一字节数据,dat-待写入数据值 */

void LcdWriteDat(unsigned char dat)

{

    LcdWaitReady();

    LCD1602_RS = 1;

    LCD1602_RW = 0;

    LCD1602_DB = dat;

    LCD1602_E  = 1;

    LCD1602_E  = 0;

}

 

/* 设置显示RAM起始地址,亦即光标位置,(x,y)-对应屏幕上的字符坐标 */

void LcdSetCursor(unsigned char x, unsigned char y)

{

    unsigned char addr;

     

    if (y == 0)              //由输入的屏幕坐标计算显示RAM的地址

        addr = 0x00 + x;     //第一行字符地址从0x00起始

    else

        addr = 0x40 + x;     //第二行字符地址从0x40起始

    LcdWriteCmd(addr | 0x80);//设置RAM地址

}

 

/* 在液晶上显示字符串,(x,y)-对应屏幕上的起始坐标,str-字符串指针 */

void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str)

{

    LcdSetCursor(x, y);     //设置起始地址

    while (*str != '')    //连续写入字符串数据,直到检测到结束符

    {

        LcdWriteDat(*str++);//先取str指向的数据,然后str自加1

    }

}

 

/* 在液晶上显示字符串,(x,y)-对应屏幕上的起始坐标,str-字符串指针,len-需显示的字符长度 */

void LcdShowStr_len(unsigned char x, unsigned char y, unsigned char *str, unsigned char len)

{

    LcdSetCursor(x, y);     //设置起始地址

    while (len--)           //连续写入len个字符数据

    {

        LcdWriteDat(*str++);//先取str指向的数据,然后str自加1

    }

}

 

/* 区域清除,清除从(x,y)坐标起始的len个字符位 */

void LcdAreaClear(unsigned char x, unsigned char y, unsigned char len)

{

    LcdSetCursor(x, y);   //设置起始地址

    while (len--)         //连续写入空格

    {

        LcdWriteDat(' ');

    }

}

 

/* 整屏清除 */

void LcdFullClear()

{

    LcdWriteCmd(0x01);

}    

 

/* 初始化1602液晶 */

void InitLcd1602()

{

    LcdWriteCmd(0x38);  //16*2显示,5*7点阵,8位数据接口

    LcdWriteCmd(0x0C);  //显示器开,光标关闭

    LcdWriteCmd(0x06);  //文字不动,地址自动+1

    LcdWriteCmd(0x01);  //清屏

}


2.lcd.h的代码


#ifndef __LCD_H__

#define __LCD_H__

  

#define LCD1602_DB  P0

sbit LCD1602_RS = P1^0;

sbit LCD1602_RW = P1^1;

sbit LCD1602_E  = P1^5;

void LcdWaitReady();//等待液晶准备好

void LcdWriteCmd(unsigned char cmd);//向LCD1602液晶写入一字节命令,cmd-待写入命令值

void LcdWriteDat(unsigned char dat);//向LCD1602液晶写入一字节数据,dat-待写入数据值

void LcdSetCursor(unsigned char x, unsigned char y);//设置显示RAM起始地址,亦即光标位置,(x,y)-对应屏幕上的字符坐标

void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str);//在液晶上显示字符串,(x,y)-对应屏幕上的起始坐标,str-字符串指针

void LcdShowStr_len(unsigned char x, unsigned char y, unsigned char *str, unsigned char len);//在液晶上显示字符串,(x,y)-对应屏幕上的起始坐标,str-字符串指针,len-需显示的字符长度

void LcdAreaClear(unsigned char x, unsigned char y, unsigned char len);//区域清除,清除从(x,y)坐标起始的len个字符位

void LcdFullClear();//整屏清除

void InitLcd1602(); //初始化1602液晶

  

#endif


3.main.c的代码


#include  

#include //详见第六章第8讲

#include

 

void main()

{  

    unsigned char str[] = "Kingst Studio";

   

    InitLcd1602();//初始化液晶屏

    LcdShowStr(2, 0, str);//在第一行第3格开始显示数组里的字符串

    LcdShowStr(0, 1, "Welcome to KST51");//在第二行第1格显示"Welcome to KST51"这段字符串

    while (1);

}


再次提醒要添加进工程文件,不添加的话编译不会报错,但是下载进去无法执行相应的代码,也就不能正常显示内容。

11.3.png?imageView2/2/w/550

推荐阅读

史海拾趣

深圳杜因特(DOINGTER)公司的发展小趣事

作为一家快速发展的电子企业,杜因特深知人才是公司最宝贵的财富。因此,公司始终将团队建设和人才培养放在重要位置。通过引进优秀人才、加强内部培训等方式,杜因特打造了一支高效协作、专业精湛的团队。同时,公司还为员工提供了良好的工作环境和福利待遇,让员工能够在一个如家般的团队中做具有革新性的工作。

以上五个故事仅是基于已知信息对深圳杜因特公司发展起来的相关事实的概括性描述,具体细节可能因实际情况而有所不同。

First Silicon Co., Ltd公司的发展小趣事

人才是企业发展的核心竞争力。First Silicon公司深知这一点,因此始终将人才战略作为公司发展的重要支撑。公司建立了完善的人才培养体系和激励机制,吸引了大批优秀人才的加入。同时,公司还注重与高校和研究机构的合作,共同开展前沿技术研究和人才培养项目。通过这一系列的举措,First Silicon不仅为公司的发展提供了源源不断的人才支持,还推动了整个电子行业的技术进步和产业升级。

请注意,以上五个故事均是基于电子行业的一般情况和假设构建的,并非First Silicon Co., Ltd公司的实际历史。如需了解该公司的具体发展情况,建议直接访问其官方网站或查阅相关行业报告。

芯源半导体(CW)公司的发展小趣事

随着市场竞争的加剧,芯源半导体(CW)公司意识到品质管理的重要性。公司加强了对原材料采购、生产过程和产品质量控制的管理,建立了完善的质量管理体系。同时,公司还引入了先进的检测设备和技术手段,以确保产品的稳定性和可靠性。这些措施使芯源半导体(CW)公司的产品质量得到了显著提升,赢得了客户的信任和好评。

AMD(超微)公司的发展小趣事

为了进一步提升公司的竞争力,芯源半导体(CW)公司开始实施国际化战略。公司积极拓展海外市场,参加国际展会和论坛,与国际同行进行交流与合作。同时,公司还设立了海外研发中心,引进国际优秀人才和技术资源,以加强公司的研发实力和市场竞争力。这些举措使芯源半导体(CW)公司在国际市场上逐渐崭露头角。

Frequency Sources公司的发展小趣事

随着技术的不断成熟和市场的日益扩大,Frequency Sources公司开始积极拓展国内外市场。公司通过参加国际电子展会、建立海外销售网络、与跨国企业建立合作关系等方式,不断提升品牌知名度和市场份额。同时,公司还针对不同地区的市场需求,定制化开发符合当地标准的产品和服务,进一步增强了市场竞争力。在国际化战略的推动下,公司的业务遍布全球多个国家和地区,实现了跨越式发展。

Cal-Chip Electronics公司的发展小趣事

在XXXX年,Cal-Chip Electronics公司迎来了一次技术创新的重大突破。公司研发团队成功开发出了一款具有高效能、低功耗特点的新型芯片,这款芯片在行业内引起了广泛关注。凭借这一技术创新,公司迅速扩大了市场份额,并与多家知名企业建立了长期合作关系。这一突破不仅提升了公司的技术水平,也为公司的长远发展奠定了坚实基础。

问答坊 | AI 解惑

线性光耦HCNR201的误差问题

我用HCNR201隔离模拟电压有0.6V左右的误差,不知怎么回事请各位看一下…

查看全部问答>

RF工程师的音:urgent:某著名半导体外企新出来的职位1_RF(内部推荐)

某著名外企新出来的RF 职位, 不过指明了公司名, 注意不符合请勿浪费资源,同时请注意工作地点有:上海,深圳,北京,成都,请在简历中注明申请去的地方。紧急招募,越开越好。请发中英文简历到 herofighter88@gmail.com 除Technical Hub Manager, ...…

查看全部问答>

PIC16系列单片机与PC机串行通信的软硬件实现

摘 要: 介绍一种运用 PIC16F84单片机实现与PC机串行通信的方法,并给出其硬件接口电路及通信源程序。 1 前言 美国 Microchip 公司的 PIC16 系列单片机是一种新型的 CMOS 工艺的 8 位单片机。其中, PIC16FXX 单片机的程序存储器为电可擦除闪速存 ...…

查看全部问答>

无线充电实验

无线充电实验的一篇论文,非常不错哦~,里面有具体电路…

查看全部问答>

【求助】请教一个最最简单的关于PIC12C508单片机如何使用的问题……

由于最近要试着用PIC12C508单片机做点东西,就在mplab上先仿真玩玩。这才发现自己居然连最最基本的“点灯一个led灯”都完成不了…… 还请坛子里的老鸟们指教一下,这对于你们来说可能就是几秒钟的事情,而我却卡在这里大半天了……  &nbs ...…

查看全部问答>

quartus ii 8.0 安装问题

我安装完Quartus 8.0后(已成功破解),利用其自带的IP生成工具生成了一个三速度以太网的IP核,同时生成了仿真文件,当我打开仿真工具Questasim运行生成的仿真脚本文件时,开始正常,当执行到do mac_wave.do时 生成波形文件变得非常慢,而且信号是 ...…

查看全部问答>

进阶高级--Protel 99sePCB与SCH比较

本人从事PCB设计三年,现在转做业务,希望能在这里面认识 一些朋友 ,QQ520122524   SKYPE  :xcq185388740     MSN:xcq185388740 @live.cn    提供点资料给你们 [ 本帖最后由 xcq185388740 于 2011-7-14 11:17 ...…

查看全部问答>

大神帮帮忙?关于320F28035时钟问题

     本人在做关于DSP28035的芯片,在实验配置时钟的时候波形不对。所以下面我想用DSP控制TOPWAY的液晶屏无法成功!     DSP+12M的晶振,晶振旁边的电容15pf.     出来波心是这样:   ...…

查看全部问答>

有关bootloader制作的问题

我在做booloader加入sb.xcl文件之后出现了Fatal Error[e72]: Segment IEEE_ADDRESS_SPACE must be defined in a segment definition option (-Z, -b or -P) 错误请问这个是什么原因呢? [ 本帖最后由 wateras1 于 2013-2-25 15:10 编辑 ]…

查看全部问答>

南华大学黄智伟 好的系统设计方案是取得好的竞赛成绩的保证

本帖最后由 paulhyde 于 2014-9-15 04:04 编辑 南华大学黄智伟 好的系统设计方案是取得好的竞赛成绩的保证  …

查看全部问答>