久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2145|回復(fù): 8
打印 上一主題 下一主題
收起左側(cè)

求助各位前輩關(guān)于51單片機(jī)串口通訊的問(wèn)題,麻煩各位了。

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:469368 發(fā)表于 2019-8-28 23:50 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
本帖最后由 Ming305 于 2019-8-29 02:08 編輯

不才在學(xué)習(xí)單片機(jī)在串口通信方面有點(diǎn)問(wèn)題需要請(qǐng)教各位前輩:
題目:1、基于單片機(jī)做一個(gè)秒表,按下按鍵s2,秒表開(kāi)始/暫停、按下s3秒表清零計(jì)時(shí)并等待開(kāi)始計(jì)時(shí)、秒表在計(jì)數(shù)的同時(shí)在數(shù)碼管顯示
          2、在串口助手顯示(同步)數(shù)碼管所顯示的時(shí)間
              總言之就是;做一個(gè)秒表,秒表的時(shí)間通過(guò)串口發(fā)電腦上

現(xiàn)在我能把要求1做出來(lái)了,但是在要求2上反復(fù)調(diào)試都不能達(dá)到所要求的效果。實(shí)在是沒(méi)有思路了,故在此求助各位前輩,望指教,謝謝各位前輩了。
現(xiàn)在我寫(xiě)的代碼如下:
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit key1=P3^0;  //λ???尷??
sbit key2=P3^1;
sbit key3=P3^2;
sbit key4=P3^3;
sbit dula=P2^6;   //????U1?????????????
sbit wela=P2^7;   //????U2?????????????
uchar code table[]={0x3f,0x06,0x5b,0x4f,
     0x66,0x6d,0x7d,0x07,
     0x7f,0x6f,0x77,0x7c,
     0x39,0x5e,0x79,0x71};

void delayms(uint);
uchar numt0,num;
void display (char numdis) //????????
{
char shi,ge;        //???????????????????
shi=numdis/10;
ge=numdis%10;

dula=1;
P0=table[shi];        //???λ???????
dula=0;
P0=0xff;         //??λ???????????????????????λ??????
wela=1;
P0=0xfe;
wela=0;
delayms(5);

dula=1;         
P0=table[ge];      //???λ???????
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delayms(5);
}
void delayms(uint xms)    //????????
{
  uint i,j;
  for(i=xms;i>0;i--)   //i=xms?????????
   for(j=110;j>0;j--);
   
}
void init()         //?????????
{           //????????0????????1??0000 0001??
  TMOD = 0x01;
  TH0=(65536-45872)/256;     //????50ms????ж?
  TL0=(65536-45872)%256;     
  EA=1;         //?????ж?
  ET0=1;         //???????0?ж?
}
//????????
void UART_init()
{
TMOD = 0x20;   //T1??????2  8λ??????
TH1 = 0xfd;
TL1 = 0xfd;  //??????9600
TR1 = 1;  //???T1?????
SM0 = 0;
SM1 = 1;   //??????????1 10λ??
REN = 1;  //???????????
EA  = 1;  //?????ж?
ES  = 1;  //?????ж??
}
/* void keyscan()
{
if(key1==0)
{
  delayms(10);
  if(key1==0)
  {
   num=0;
   while(!key1);
  }
}
if (key2==0)
{
  delayms(10);
  if(key2==0)
  {
    while(!key2);
   TR0=~TR0;
  }
}  
} */
void main()
{  
  UART_init;
  init();
  while(1)
  {
   display(num);
   //keyscan();
   if(key1==0)
{
  delayms(10);
  if(key1==0)
  {
   num=0;
   while(!key1);
  }
}
if (key2==0)
{
  delayms(10);
  if(key2==0)
  {
    while(!key2);
   TR0=~TR0;
  }
}  

  }
}
void T0_time() interrupt 1
{
   TH0=(65536-45872)/256;     //??????
      TL0=(65536-45872)%256;
   numt0++;
   if(numt0==20)      //???????20?Σ????1s???
   {
    numt0=0;      //????numt????
    num++;
    if(num==60)
     num=0;
   }   
}



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:275826 發(fā)表于 2019-8-29 09:22 | 只看該作者
程序沒(méi)看見(jiàn)有串口發(fā)送語(yǔ)句呀
回復(fù)

使用道具 舉報(bào)

板凳
ID:605057 發(fā)表于 2019-8-29 11:36 | 只看該作者
你這都沒(méi)有把秒表數(shù)據(jù)通過(guò)串口發(fā)送出去
回復(fù)

使用道具 舉報(bào)

地板
ID:605057 發(fā)表于 2019-8-29 11:37 | 只看該作者
你這都沒(méi)有串口發(fā)送部分
回復(fù)

使用道具 舉報(bào)

5#
ID:517466 發(fā)表于 2019-8-29 11:39 | 只看該作者
1、UART_init;這樣的語(yǔ)句能通過(guò)編譯?
2、像樓上說(shuō)的那樣,你都沒(méi)有執(zhí)行串口的發(fā)送語(yǔ)句。比如SBUF=xx;white(TI);TI=0;之類(lèi)的執(zhí)行語(yǔ)句。
回復(fù)

使用道具 舉報(bào)

6#
ID:213173 發(fā)表于 2019-8-29 14:24 | 只看該作者
樓主只寫(xiě)了串口初始化程序并且還是錯(cuò)誤的,沒(méi)有寫(xiě)串口發(fā)送語(yǔ)句。你這個(gè)按鍵程序會(huì)干擾數(shù)碼管顯示和串口,所以都放在中斷里了。并把全部錯(cuò)誤改正了,串口1秒發(fā)送1次數(shù)據(jù)。有詳細(xì)注釋。
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
//sbit key1=P3^0;//P3.0、P3.1是串口引腳,不宜重疊使用
//sbit key2=P3^1;
//sbit key3=P3^2;
//sbit key4=P3^3;
sbit key1=P3^4;
sbit key2=P3^5;
sbit key3=P3^6;
sbit key4=P3^7;
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]={0x3f,0x06,0x5b,0x4f,
     0x66,0x6d,0x7d,0x07,
     0x7f,0x6f,0x77,0x7c,
     0x39,0x5e,0x79,0x71};

void delayms(uint);
uchar numt0,num;
bit flag=0;//開(kāi)/停位變量

void display(uchar numdis)
{
        static bit i=0;
//        uchar shi,ge;
//        shi=numdis/10;
//        ge=numdis%10;
        P0=0x00;//消隱
        dula=1;
        dula=0;
        if(i==1)
        {
                P0=0xfe;
                wela=1;
                wela=0;
       
                P0=table[numdis/10];
                dula=1;
                dula=0;
                i=~i;
        }
        else
        {
                P0=0xfd;
                wela=1;
                wela=0;
       
                P0=table[numdis%10];
                dula=1;         
                dula=0;
                i=~i;
        }
}
void delayms(uint xms)
{
        uint i,j;
        for(i=xms;i>0;i--)
                for(j=110;j>0;j--);  
}
void init()
{
//        TMOD= 0x01;
        TMOD|=0x01;//重復(fù)設(shè)置TMOD需要加"|"符
        TH0=(65536-4608)/256;//5ms
        TL0=(65536-4608)%256;     
        EA=1;
        ET0=1;
        TR0=1;
}

void UART_init()
{
//        TMOD= 0x20;
        TMOD|=0x20;//重復(fù)設(shè)置TMOD需要加"|"符
        TH1 = 0xfd;
        TL1 = 0xfd;
        TR1 = 1;
        SM0 = 0;
        SM1 = 1;
        REN = 1;
//        EA  = 1;//重復(fù)設(shè)置,多余
//        ES  = 1;//只發(fā)不收,多余
}

void main()
{  
//        UART_init;//這里少()
        UART_init();
        init();
        while(1)
        {
                if(key1==0)
                {
                        delayms(10);
                        if(key1==0)
                        {
                                numt0=0;
                                num=0;
                                flag=0;
                                while(!key1);
                        }
                }
                if (key2==0)
                {
                        delayms(10);
                        if(key2==0)
                        {
                                flag=~flag;
                                while(!key2);
//                                TR0=~TR0;
                        }
                }         
        }
}
void T0_time() interrupt 1
{
        TH0=(65536-4608)/256;//5ms
        TL0=(65536-4608)%256;      
        if(flag)
        {
                numt0++;
                if(numt0==200)
                {
                        numt0=0;
                        num++;
                        if(num==60)
                                num=0;
                        SBUF=num;        //每隔秒發(fā)送一次數(shù)據(jù)
                        while(!TI);        //等待發(fā)送中斷請(qǐng)求標(biāo)志位為1(發(fā)送結(jié)束)
                        TI=0;                        //發(fā)送中斷請(qǐng)求標(biāo)志位清0,為下次發(fā)送做準(zhǔn)備
                }   
        }
        display(num);//動(dòng)態(tài)顯示放在中斷里不受按鍵干擾
}
回復(fù)

使用道具 舉報(bào)

7#
ID:469368 發(fā)表于 2019-9-8 12:37 | 只看該作者
wulin 發(fā)表于 2019-8-29 14:24
樓主只寫(xiě)了串口初始化程序并且還是錯(cuò)誤的,沒(méi)有寫(xiě)串口發(fā)送語(yǔ)句。你這個(gè)按鍵程序會(huì)干擾數(shù)碼管顯示和串口,所 ...

太謝謝你了
回復(fù)

使用道具 舉報(bào)

8#
ID:469368 發(fā)表于 2019-9-8 12:38 | 只看該作者
suncat0504 發(fā)表于 2019-8-29 11:39
1、UART_init;這樣的語(yǔ)句能通過(guò)編譯?
2、像樓上說(shuō)的那樣,你都沒(méi)有執(zhí)行串口的發(fā)送語(yǔ)句。比如SBUF=xx;whi ...

謝謝斧正,太謝謝了
回復(fù)

使用道具 舉報(bào)

9#
ID:93224 發(fā)表于 2019-9-10 10:00 | 只看該作者
你的程序?qū)懙倪壿嬘袉?wèn)題,自己好好縷一縷
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: tube国产| 国产精品二区三区 | 911精品美国片911久久久 | 日韩一区二区三区视频 | 日本视频一区二区三区 | 最新免费av网站 | 久久久久9999亚洲精品 | 欧美videosex性极品hd | 国产一级精品毛片 | 精品久久国产 | 国产免费国产 | 亚洲系列第一页 | 久久一区 | 久久伊人精品 | 免费黄网站在线观看 | 成人网视频 | 蜜臀久久99精品久久久久野外 | 精品美女在线观看视频在线观看 | 久久国产精品-国产精品 | 日本网站免费在线观看 | 在线视频国产一区 | 久久精片| 中文久久| 欧美一卡二卡在线观看 | 成人精品一区二区三区 | 久久综合久色欧美综合狠狠 | 成人亚洲视频 | 韩国精品一区 | 毛片网站在线观看 | 久久精品美女 | 成人在线视频网 | 国产a级毛片 | 91在线视频网址 | 欧美影院久久 | yeyeav| 99伊人网| 亚洲精品成人av | 电影午夜精品一区二区三区 | 欧美日韩看片 | 亚洲一区二区三区久久 | 综合久久av |