7.串口&液晶屏Ⅱ

发布日期:2020-12-26 09:09:46 来源:网络转载

1.题目要求

在上一讲代码测试中,电脑端发送过来的数据单片机这边需要用数组存取起来,再把这些数据通过液晶屏显示出来,不过我们也可以把接收到的数据直接写进液晶屏的RAM中让它实时显示。

比如在电脑端那边发送“DAN ”(DAN后面有一个空格),液晶屏就从第一格开始显示“DAN ”,

接着在电脑端上我们删除之前发送过的内容,打上“PIAN ”然后发送,

删除之前发送过的内容打上“JI”发送,观察液晶屏的显示情况。


2.main.c测试代码

#include <reg52.h> 
#include <function.h> //详见第六章第8讲
#include <lcd.h>      //详见第十一章第3讲
#include <uart.h>     //详见第十章第4讲

u8 i=0;
u8 pdata RXDBUF[64];
void main()
{  
    EA = 1;             //闭合总中断开关
    ConfigUART(9600);
    InitLcd1602();      //初始化液晶屏 
    LcdSetCursor(0, 0);
    while(1);
}
   
void InterruptUART() interrupt 4
{  
    static u8 i;
    if (RI)                          //接收到字节
    {
        RI = 0;  
        LcdWriteDat(SBUF);           //接收到一个字节数据就写进液晶屏的RAM中让它实时显示
        i++;
        if(i==16)LcdSetCursor(0, 1); //换行显示
        if(i>32)
        {
            i=0;
            LcdFullClear();          //整屏清除
            LcdSetCursor(0, 0);      //又从起点开始显示
            LcdWriteDat(SBUF);
        }
    }
}

第一次下载进去之后都需要复位一下开发板,因为一开始在液晶屏上都会看到个别乱码。

还有,如果此时的液晶屏被我们用串口写满了32格,下次再写的时候,必须只能写一个字符,然后发送,如果在满屏的时候写两个字符及以上的话,比如写“AB”,就会显示“BB”。

这是因为电脑端发送的数据间隔时间都是很快的,我们在“if(i>32)”的内容里执行整屏清除,设置坐标从“0,0”开始,这些任务占用了CPU资源,导致错过了电脑端发送的连续的字符。如果只发送一个字符,那么SBUF会一直保留住这个数据,等到清屏函数之类的任务执行完了,“LcdWriteDat(SBUF);”就是写入那个字符的数据了。

关键词 :
网站违法和不良信息举报邮箱:23139485@qq.com
CopyRight@2020-2030 www.haoapp8.cn All Rights Reserved.C语言学习网版权所有 粤ICP备15061369号
免责声明:本站内容来源于用户自行提供或网络收集,其真实性、准确性和合法性,www.haoapp8.cn不提供任何保证,亦不承担任何法律责任.而产生的法律关系及法律纠纷,由您自行协商解决。