历史上的今天
返回首页

历史上的今天

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

正在发生

2021年08月27日 | 51单片机-各功能代码的运用

2021-08-27 来源:eefocus

尽管部分初学者对液晶屏的全部代码的理解存在困难,不过没关系,只要我们懂得如何运用它们各个函数的功能即可,大家下载进开发板之后观察实验现象再结合代码与注释慢慢细读掌握吧。


1.测试代码


#include  

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

#include

 

void main()

{  

    char x;//取值范围-128~127

    u8 str1[] = "Good Good Study";

    u8 str2[] = "Day Day Up!";

 

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

 

    while (1)

    {

        LcdSetCursor(0,0);//把光标移到第一行第1格,准备写入内容

        LcdWriteDat(87);  //写入字符“W”的ASCII码值,让其显示字符W

        delay_ms(2000);   //延时一段时间

 

        LcdSetCursor(0,1);//把光标移到第二行第1格,准备写入内容

        LcdWriteDat('X'); //字符'X'的ASCII码值为88,此种表达写法更加直观明白要显示的内容 

        delay_ms(2000);   //延时一段时间

 

        LcdFullClear();   //全部内容清除显示

        delay_ms(2000);   //延时一段时间

 

        LcdShowStr(1, 0, str1);//第一行显示"Good Good Study"

        LcdShowStr(3, 1, str2);//第二行显示"Day Day Up"  

        delay_ms(2000);//延时一段时间

 

        LcdFullClear();//全部内容清除显示

        delay_ms(2000);//延时一段时间

 

        LcdShowStr_len(0, 0, "CALL TO 10086", 7);//只能显示字符串的前面7个字符,也就是只能显示“CALL TO”

        LcdShowStr_len(0, 1, str1, 11);          //只能显示“Good Good S”

        delay_ms(2000);//延时一段时间

 

        for(x=10;x>=0;x--)

        {

            LcdAreaClear(x, 1, 1);//间隔1秒,依次清除“S”、“ ”、“d”、“o”、“o”、“G”······

            delay_ms(1000);   

        }

 

        for(x=6;x>=0;x--)

        {

            LcdAreaClear(x, 0, 1);//间隔1秒,依次清除“O”、“T”、“ ”、“L”、“L”、“A”、“C”

            delay_ms(1000);   

        }

    }

}


有了这段代码,观察实验现象就能更加明白掌握各功能函数的用法了。


2.回顾printf函数


此时我们回到第十章第4节的printf_str函数观察下面这两段代码


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

{

    SBUF=*str++;

    while(!TI);

    TI = 0;

}



while(i>=0) //剩余低位都如实发送出去

{   

    SBUF='0'+buf[i];//如果此时的buf[i]的值是1,那么电脑端窗口在“文本模式”下要想显示字符“1”,只需'0'+1,因为‘0’就是ASCII码值48

    while(!TI);

    TI = 0;  

    i--;   

}


学过了液晶屏代码的写法技巧,现在再阅读当初的这两段代码就能明白“SBUF=*str++;”是发送一个数组或者一个字符串的所有数据。


而“SBUF='0'+buf[i];”发送的就是字符’0’~’9’其中一个数据,因为buf[i]在前面的执行内容中规定了数值范围为0~9,


所以“ '0'+buf[i] ”本质就是“ '0'~'9' ”。


需要注意的是,‘0’代表的是ASCII码值,跟ASCII码值为0不一样。


ASCII码值为0时的字符是:‘’(也就是结束符)


ASCII码值为48时的字符是:‘0’


推荐阅读

史海拾趣

CML公司的发展小趣事

面对日益增长的市场需求,CML开始积极寻求市场扩张的机会。公司通过与各大电子产品制造商建立合作关系,将自己的产品广泛应用于电视、手机、电脑等消费电子产品中。同时,CML还积极开拓新兴市场,如汽车电子、工业控制等领域,不断扩大自己的市场份额。这些策略的实施,使得CML的业绩逐年攀升,公司规模不断壮大。

Analog Microwave Design公司的发展小趣事

随着公司规模的不断扩大,Analog Microwave Design公司开始将目光投向国际市场。为了更好地拓展海外业务,公司制定了一套完善的国际化战略。首先,公司加强了与国际知名企业的合作,通过技术交流和合作研发,提升了公司的技术水平和国际影响力。其次,公司积极参加国际展览和会议,展示公司的最新产品和技术成果,吸引了众多海外客户的关注。通过这些努力,公司的海外业务得到了快速发展,成为公司新的增长点。

华润微(CRMICRO)公司的发展小趣事

尽管面临市场终端景气度低迷等挑战,华润微依然保持稳健的发展态势。公司积极应对市场变化,通过优化产品结构、加大研发投入等措施,不断提升自身竞争力。同时,华润微也看到了新能源业务等领域的巨大潜力,将其作为未来发展的重要方向。通过不断的技术创新和市场拓展,华润微有望在电子行业中实现更加辉煌的成就。

ANSHAN [Anshan Suly Electronics]公司的发展小趣事

ANSHAN公司成立于上世纪末,当时正值电子行业的蓬勃发展期。创始人李先生凭借对电子技术的深厚理解和敏锐的市场洞察力,决定投身于这个充满机遇的领域。初创时期的ANSHAN面临资金短缺、人才匮乏和技术壁垒等多重挑战。然而,李先生带领团队日夜兼程,不断研发新产品,拓展市场渠道。他们坚持自主创新,不断攻克技术难题,逐渐在电子行业中崭露头角。

捷茂微(GATEMODE)公司的发展小趣事

ANSHAN公司成立于上世纪末,当时正值电子行业的蓬勃发展期。创始人李先生凭借对电子技术的深厚理解和敏锐的市场洞察力,决定投身于这个充满机遇的领域。初创时期的ANSHAN面临资金短缺、人才匮乏和技术壁垒等多重挑战。然而,李先生带领团队日夜兼程,不断研发新产品,拓展市场渠道。他们坚持自主创新,不断攻克技术难题,逐渐在电子行业中崭露头角。

光磊(GL)公司的发展小趣事

近年来,随着电子行业的竞争日益激烈和市场环境的不断变化,ANSHAN公司面临着前所未有的挑战。然而,公司始终保持着清醒的头脑和坚定的信心,积极应对各种挑战。公司不断调整战略方向,优化产品结构,加大创新力度,推出了一系列具有竞争力的新产品。同时,公司还积极拓展新的市场领域和合作伙伴,为公司的持续发展注入了新的动力。

这五个故事展示了ANSHAN公司在电子行业发展中不断克服困难、取得成就的历程。从创业初期的艰辛与坚持,到技术突破与产品升级,再到市场拓展与品牌建设、人才培养与团队建设以及应对挑战与持续创新,ANSHAN公司始终保持着坚定的信念和不懈的努力,在电子行业中谱写了一曲曲壮丽的篇章。

问答坊 | AI 解惑

99SE 转Gerber视频教程

教程分三部分: 1 PADS 转文件文字教程 2 99SE 转文件文字教程 3 CAM350 导入文件…

查看全部问答>

lwip 的性能到底怎样?我需要它长期运行,但它出现“重传”现象,而且十几分钟后会出现被PC端“FIN”断开。

lwip 的性能到底怎样?我需要它长期运行,但它会出现“重传”现象,而且十几分钟后会出现被PC端“FIN”断开。 本人刚开户,没有那么什么积分可以悬赏。sorry。…

查看全部问答>

关于DeviceIoControl控制摄像头的操作码

2440的开发板,编过摄像头的应用程序,就用DeviceIoControl函数对摄像头进行操作。记得IOCTL_CAM_CONT这个操作码是使能并初始化摄像头,CAM_IOCTL_GET_LATEST_FRAME这个是拍照,现在想问一下对于视频摄像,应该用哪个操作码?(想到一个很笨的方法 ...…

查看全部问答>

几个驱动同时对注册表某项读写,如何保证数据的完整和正确?

驱动程序是自己写的. 还要加些什么代码. 怎样写? 谢谢. …

查看全部问答>

请问s3c2410中addr0,addr1,addr2,addr3,addr4等地址线怎么操作

在S3C2410.h中找不到对应的寄存器定义啊?请问怎么进行读写操作?谢谢!…

查看全部问答>

为何不接收浮点参数????以及在shell中不能对浮点型全局变量赋值呢???

代码如下: #include \"vxworks.h\" #include \"stdio.h\" void test(float a,int b) { printf(\"a=%f,b=%d\"); } 编译完了,运行,在windshell中 敲入test(2.2,3)命令运行结果整型b可以打印正确结果,浮点a打印N/A。不明白为什么会这样 ...…

查看全部问答>

如何查找无线AP的IP

无线AP我设过静态IP地址。现在无线我可以连接使用,但是我忘了当时的ip地址,无线AP无法配置。 请高手支招。 在下先谢谢了!!^_^…

查看全部问答>

EVC下的程序问题,请大家帮帮忙!

我在调别人写的程序,刚开始用EVC3.0,有许多错误调也调不出来,如果我想用他原程序中的一部分,哪些文件必须留下呢? 我留下了一些.cpp和.h文件,还有.vcw和.vcp文件,以及程序中用到的.ico文件,还有.rc文件,但是在编译时还是出了错误,告诉我 ...…

查看全部问答>

大侠,来看看我的软件串口啥问题

我的软件串口,错在那,请指教,谢谢 //ACLK = 32768,波特率为2400的软件串口// #define Bitime_5 0x06 // ~ 0.5 的长度添加一点修正 #define Bitime 0x0E // 427us 长度 ~ 2341波特根据实际需要修改 ...…

查看全部问答>

【为2011大赛准备】集成运算放大器分析与设计

本帖最后由 paulhyde 于 2014-9-15 03:52 编辑 第一次发帖,希望大家能喜欢~~~  …

查看全部问答>