找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1545|回复: 2
收起左侧

51单片机时钟,如何将时分秒数据传送到串口助手上?

[复制链接]
ID:512275 发表于 2019-12-19 10:44 | 显示全部楼层 |阅读模式
当前已完成时钟的走停,现在要让时分秒数据发送到串口助手上,不知道如何写程序了?年月日暂时先不弄,时分秒的数据只能分别发送到串口助手上显示,有没有大佬帮忙看看如何还你那个时分秒整体数据发送到串口助手上
/**************************************************************************************************************************************************************/
#include<reg51.h>        
#include"lcd.h"
sbit key1=P1^4;
sbit key2=P1^5;
sbit key3=P1^6;
extern uchar code table[]=" 2020-01-01 THU";
extern uchar code table1[]="    00:00:00";
uchar count,key1num;
char shi,fen,miao;
char ri,yue,nian;



void delay(uint z)     /延时
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}
void Init ()           /初始化
{        uchar num;
        P1=0xf0;
        InitLcd1602();
        EA=1;              
        TMOD=0x01;
        TH0=(65536-50000)/256;      
        TL0=(65536-50000)%256;        
        ET0=1;
        TR0=1;
        for(num=0;num<15;num++)
                {
                        Lcd1602_Write_Data(table[num]);
                        delay(5);
                }
        Lcd1602_Write_Cmd(0x80+0x40);
        for(num=0;num<12;num++)
                {
                        Lcd1602_Write_Data(table1[num]);
                        delay(5);
                }
}        
void write_sfm(uchar add,uchar date)    //时分秒
{
        uchar shi1,ge;
        shi1=date/10;
        ge=date%10;
         Lcd1602_Write_Cmd(0x80+0x40+add);
   Lcd1602_Write_Data(0x30+shi1);
   Lcd1602_Write_Data(0x30+ge);
         SBUF=0x30+shi1;
          while (!TI);   
    TI = 0;
         SBUF=0x30+ge;
          while (!TI);  
    TI = 0;
}

void write_nyr(uchar add,uchar date)
{
        char shi2,ge2;
        shi2=date/10;
        ge2=date%10;
         Lcd1602_Write_Cmd(0x80+add);
   Lcd1602_Write_Data(0x30+shi2);
   Lcd1602_Write_Data(0x30+ge2);
}

void timer0() interrupt 1
{
  TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        count++;  
        if(count==20)
        {
          count=0;
                miao++;
                if(miao==60)
                {
                                miao=0;
                                fen++;
                                if(fen==60)
                                {
                                         fen=0;
                                                shi++;
                                        if(shi==24)
                                        {  
             shi=0;
             ri++;
             if(ri==31)
                                          {
                      ri=0;
                yue++;
                if(yue==13)
                                              {
                                                  yue=0;
                                                        nian++;
                                                                        write_nyr(3,nian);
                                                           }               
                                                                write_nyr(6,yue);
                                          }               
                                                  write_nyr(9,ri);
                                        }
                                        write_sfm(4,shi);

        }
}

void KEY()
{
    if(key1==0)
                {
                delay(5);
                        if(key1==0)
                        {           key1num++;
                                                        while(!key1);
                                                        if( key1num==1)
                                                        {
                                                                TR0=0;
                                                         Lcd1602_Write_Cmd(0x80+0X40+11);
                                                         Lcd1602_Write_Cmd(0x0f);
                                                        }
                                                        if( key1num==2)
                                                        {
                                                        Lcd1602_Write_Cmd(0x80+0X40+8);
                                                        }
                                                        if( key1num==3)
                                                        {
                                                        Lcd1602_Write_Cmd(0x80+0X40+5);
                                                        }
                                                        if( key1num==4)
                                                        {
                                                                key1num=0;
                                                        Lcd1602_Write_Cmd(0x0c);
                                                                 TR0=1;
                                                        }
                           }
                        }
                if(key1num!=0)
                        {
                          if(key2==0)
                                {
                                    delay(5);
                                        if(key2==0)
                                        {   while(!key2);
                                            if(key1num==1)
                                                        {
                                                            miao++;
                                                                if(miao==60)
                                                                        miao=0;
                                                                        write_sfm(10,miao);
                                                                  Lcd1602_Write_Cmd(0x80+0X40+11);
                                                
                                                         }
                                                           if(key1num==2)
                                                          {   fen++;
                                                                   if(fen==60)
                                                                             fen=0;
                                                                             write_sfm(7,fen);
                                                                       Lcd1602_Write_Cmd(0x80+0X40+8);
                                                           }
                                                           if(key1num==3)
                                                           {   shi++;
                                                                   if(shi==24)
                                                                           shi=0;
                                                                           write_sfm(4,shi);
                                                                     Lcd1602_Write_Cmd(0x80+0X40+5);
                                                      }
                                           }
                                        }
                                if(key3==0)
                                        {
                                           delay(5);
                                                  if(key3==0)
                                                                while(!key3);
                                                           if(key1num==1)
                                                                        {
                                                                                        miao--;
                                                                                if(miao==-1)
                                                                                        miao=59;
                                                                                        write_sfm(10,miao);
                                                                                        Lcd1602_Write_Cmd(0x80+0X40+11);
                                                               
                                                                         }
                                                                                 if(key1num==2)
                                                                                {   fen--;
                                                                                         if(fen==-1)
                                                                                                         fen=59;
                                                                                                         write_sfm(7,fen);
                                                                                                         Lcd1602_Write_Cmd(0x80+0X40+8);
                                                                                 }
                                                                                 if(key1num==3)
                                                                                 {   shi--;
                                                                                         if(shi==-1)
                                                                                                 shi=23;
                                                                           write_sfm(4,shi);
                                                                     Lcd1602_Write_Cmd(0x80+0X40+5);
                                                         }
                                        }
                                
                }
}


void main(void)
{  
   Init();        
    UsartConfiguration();
//         write_sfm(0x80+0x40+5,shi);
//         SBUF=shi;
//         while (!TI);
//         TI = 0;
//         write_sfm(0x80+0x40+8,fen);
//         SBUF=fen;
//         while (!TI);
//         TI = 0;
//        write_sfm(0x80+0x40+11,miao);
//         SBUF=miao;
//         while (!TI);
//         TI = 0;
//        
//         Lcd1602_Write_Cmd(0x80+0x40+5);
//         SBUF=shi;
//         while (!TI);
//         TI = 0;
//         Lcd1602_Write_Cmd(0x80+0x40+8);
//         SBUF=fen;
//         while (!TI);  
//         TI = 0;
//         Lcd1602_Write_Cmd(0x80+0x40+11);
//         SBUF=miao;
//         while (!TI);
//         TI = 0;
        
   while(1)
         {  
                 KEY();
         }
                        
}




回复

使用道具 举报

ID:378732 发表于 2019-12-19 16:23 | 显示全部楼层
用stdio.h里面的printf();函数。
串口助手用文本模式。
回复

使用道具 举报

ID:213173 发表于 2019-12-19 17:37 | 显示全部楼层
1.添加串口初始化程序(略)
2.添加串口发送程序
  1. void Send_byte(unsigned char dat)
  2. {
  3.         SBUF = dat;
  4.         while(!TI);
  5.         TI = 0;
  6. }        
  7. void main(void)
  8. {  
  9.         unsigned char i,j;
  10.         Init();        
  11.         UsartConfiguration();
  12.         while(1)
  13.         {  
  14.                 KEY();
  15.                 if(j!=miao)//每秒发送一次
  16.                 {
  17.                         j=miao;
  18.                         for(i=4;i>12;i++)
  19.                                 Send_byte(table1[i]);//把保存在table1[]里的字符串发送串口
  20.                 }
  21.         }                  
  22. }
复制代码
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表