关于上位机发送数据给单片机改变当前1602的显示时间

2019-03-24 18:09发布

大虾们!帮帮忙,我现在在学串口通信,我知道上位机发送一个字节的数据给单片机,然后让数码管显示发送的数据但是现在我想通过上位机发送一些数据给单片机,让1602显示的时间通过上位机发过来的数据进行改变,
该怎么发送呢
哪位大虾有这个程序没有?
贴出来好吗?
谢谢了
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
werjufour
1楼-- · 2019-03-25 14:03
 精彩回答 2  元偷偷看……
werjufour
2楼-- · 2019-03-25 14:27
男儿当自强 发表于 2014-11-3 23:04
通过UART通信啊

关键是怎么处理中断服务程序,是同时接收吗?
还是一个字节中断一次呢?
你有这方面的程序没有,帮帮忙,好吗?大侠!
werjufour
3楼-- · 2019-03-25 17:54
Study_Stellaris 发表于 2014-11-4 09:07
上下位机需要配合的,还是要自己你设计。

大侠,你有这方面的中断服务程序没有?该怎么处理发送过来的多个字节的数据呢?
是中断一次吗?
还是一个字节中断一次呢?在此谢谢大侠了,帮帮我好吗?
jishuaihu
4楼-- · 2019-03-25 22:45
 精彩回答 2  元偷偷看……
werjufour
5楼-- · 2019-03-26 02:42
jishuaihu 发表于 2014-11-7 11:38
每个字节中断一次。手里没有现成的全局变量,uchar flag,array[14],cnt;
初始化中
flag= 0;

谢谢大侠
werjufour
6楼-- · 2019-03-26 05:21
jishuaihu 发表于 2014-11-7 11:38
每个字节中断一次。手里没有现成的全局变量,uchar flag,array[14],cnt;
初始化中
flag= 0;

帮我看看这程序有什么问题没有?
我已经按了串口助手发送数据,但是时间不刷新不知道怎么回事!程序如下;
#include<reg51.h>
#include"DS1302.h"
#include"1602.h"
uchar flag=0;
void main()
{
        SCON=0x50;//串口选择工作方式为1;
        TMOD=0x20;//选择定时器1工作方式2;
        PCON=0x80;//波特率加倍;
        TH1 =0xF3;
    TL1 =0xF3;//设置定时器1初值,产生4800的波特率;
        ES=1;/*打开串口中断*/
        EA=1;/*打开总中断*/
        TR1=1;//开启定时器1产生波特率;

        LcdInit();
        Ds1302Init();/*1302初始化时间0秒0分12时1日1月星期3,2014年*/

        while(1)
        {
                if(flag==0)
                {
                        Ds1302ReadTime();        /*读取DS1302中的数据到全局变量数组TIME中*/       
                        LcdWriteCom(0x80+0x40);
                        LcdWriteData('0'+TIME[2]/16);
                        LcdWriteData('0'+(TIME[2]&0x0f));
                        LcdWriteData('-');
                        LcdWriteData('0'+TIME[1]/16);
                        LcdWriteData('0'+(TIME[1]&0x0f));
                        LcdWriteData('-');
                        LcdWriteData('0'+TIME[0]/16);
                        LcdWriteData('0'+(TIME[0]&0x0f));
                        LcdWriteCom(0x80+0x49);
                        LcdWriteData('0'+(TIME[5]&0x07));
                        LcdWriteCom(0x80);
                        LcdWriteData('0'+2);
                        LcdWriteData('0'+0);
                        LcdWriteData('0'+TIME[6]/16);
                        LcdWriteData('0'+(TIME[6]&0x0f));
                        LcdWriteData('-');
                        LcdWriteData('0'+TIME[4]/16);
                        LcdWriteData('0'+(TIME[4]&0x0f));
                        LcdWriteData('-');
                        LcdWriteData('0'+TIME[3]/16);
                        LcdWriteData('0'+(TIME[3]&0x0f));
                }
        }
}

void usartconfiguration() interrupt 4
{
        uchar temp,cnt=0;
        temp=SBUF;
        if(flag==0)
        {
              if(temp=='A')
              {
                flag=1;
                cnt=0;
             }
       
        }
        else
        {
            TIME[cnt++]=temp;
            if(cnt>6)
           {   
                           Ds1302Init()/*刷新发送过来的数据*/
               cnt=0;
               flag=0;
                  
           }
        }
        RI=0;/*接收标志清0*/
}

一周热门 更多>