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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1957|回復: 2
打印 上一主題 下一主題
收起左側

我想咨詢一個51串口通信為什么不能顯示到數碼管上

[復制鏈接]
跳轉到指定樓層
樓主
ID:406900 發表于 2020-5-18 23:11 來自手機 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
麻煩各位大佬幫我看看吧
#include<reg52.h>
#include<stdio.h>
#include<string.h>
#define uint unsigned int
#define uchar unsigned char
void    initSer();          //串口初始化  
uchar  sendFlag = 0;     //未發送數據時  
uchar  receFlag =0;     //未接受到數據時  
unsigned char dat;
char buf_string[4];  //定義數據包長度為15個字符
uint  xs;
uint  cc=0;
uint  us;
//uint  num=120;
uchar disbuffer[4];
sbit KEY = P3^2;
sbit KEY1 = P3^3;
sbit CLK=P3^7;        //ê±?óD?o?
sbit ST=P3^4;        //???ˉD?o?
sbit EOC=P3^5;        //×a???áê?D?o?
sbit OE=P3^6;        //ê?3?ê1?ü
sbit beep = P2^4;//zhuanhuan
sbit led = P2^5;
uchar dat,num,flag;//發送暫存變量
uchar LED_Buffer[3] = {0};      //從串口接收的數據
//uchar Buffer[2]={0};
uchar code table[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar i=0,flag;
int bai,shi,ge;
int shuzi=0;
uchar rlen = 0;
uchar Buffer[10];
uchar ii;
uchar Receive_Buffer[10];
uchar Buf_Index = 0;
uint rnum=0;


#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar  bufr[]="------\r\n";//存放接收數據
uchar *prx=&bufr;//接收指針
bit str;  //接收完畢標志位
//段碼
uchar code leddata[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

//延時函數
void delay( uint i)
{
        uint m,n;
        for(m=i;m>0;m--)
                for(n=90;n>0;n--);
}
//數碼管顯示函數
void led_display()
{
        uchar i;
        P2 = 0x01;
        for(i=0;i<4;i++)
        {       
                P0=0xff;
                P2 = _cror_(P2,1);
                P0 = leddata[bufr[i]-'0'];
                delay(2);
        }
}

//字符發送函數
void putchar(uchar data1)  
{
        SBUF = data1;             //將待發送的字符送入發送緩沖器
        while(!TI);                //等待發送完成
        TI = 0;                    //發送中斷標志請0
}
//字符串發送函數
void putstring(uchar *dat)
{
  while(*dat != '\0')    //判斷字符串是否發送完畢
{                         
   putchar(*dat);        //發送單個字符
   dat++;                //字符地址加1,指向先下一個字符
   delay(5);
}
}
//串口初始化函數
void serial_init()
{
        TMOD = 0x20;  //定時器工作方式2
        SCON = 0x50;  //串行口工作方式2
        PCON = 0x80; //SMOD = 1,波特率加倍
        TH1 = 0xfa;
        TL1 = 0xfa;        //波特率設置9600
        ES = 1;
        EA  = 1;//開總中斷
}
void main()
{
        serial_init();
        TR1 = 1;
    putstring("Receiving from 8051...\r\n");         
        putstring("----------------------\r\n");
        delay(50);
        while(!str);//等待接收完畢
        while(1)
        {       
                P0=0xff;
                while(!str);
                led_display();
        }
}
void serial() interrupt 4
{
        if(RI!=1) return;//判斷是否接收
        {       
                str = 0;
                ES = 0;
                *prx = SBUF; //接收存放數據
                putchar(*prx);
                RI = 0;
                prx++;        //指針自加
                if(*prx=='\0') //是否接收完成
                {
                        prx = &bufr;//指針初始化
                        str = 1; //標志位置1
                        putstring("\r\n");
                        putstring("translate over!\r\n");
                        ES = 1;
                        return;
                }
                ES = 1;
                return;         //退出中斷
        }
}


void delay(uint i)                                                          //?óê±
{
        uint j;
        for(j=i;j>0;j--);
}
void delay_ms(unsigned int x)
{
        uchar i;
        while(x--)
        {
                 for(i=0;i<120;i++);
        }
}
          /*******************ADC?áè?******************/

void display(void)
{
        uchar codevalue[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
        0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x40};
        uchar chocode[]={0xf7,0xfb,0xfd,0xfe};
        uchar i=0,p,t;
        disbuffer[0]=(rnum%10);
        disbuffer[1]=(rnum%100/10);
        disbuffer[2]=(rnum/100);
        for(i=0;i<4;i++)
        {
                t=chocode[i];
                P2=t;
                p=disbuffer[i];
                t=codevalue[p];
                P0=t;
                delay(40);
        }
        P2=0xff;
}

void Timer0_INT() interrupt 1
{
        TH0=(65536-10)/256;
        TL0=(65536-10)%256;
        CLK=~CLK;
       
}



/********************************************************************
* 名稱 : Com_Init()
* 功能 : 串口初始化,晶振11.0592,波特率9600,使能了串口中斷
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void Com_Init(void)
{
                 SCON = 0x50;       
     TMOD = 0x20;
     PCON = 0x00;
                    
     TH1 = 0xFd;    //設置波特率 9600
     TL1 = 0xFd;
          
     TR1 = 1;                //啟動定時器1
                        ES = 1;                //開串口中斷
                        EA = 1;                //開總中斷               
}


void check_led()
{
if(rnum>200)
{
led=0;
}
else
{ led=1;}
}

char putchar(char c)
{
        SBUF = c;
        while(TI == 0);
        TI = 0;
        return c;
}

void SendString(char *s)
{
        while(*s)
        {
                putchar(*s);
                s++;
       
       
        }
}
/********************************************************************
* 名稱 : Main()
* 功能 : 主函數
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void Main()
{

       
        SCON = 0x50;
        TMOD = 0x21;
        PCON = 0x00;
        TH1  = 0xfd;
        TL1  = 0xfd;
//       
//        TMOD|=0X02;          
        TH0=(65536-10)/256;
        TL0=(65536-10)%256;
//       
////        EX0  = 1;
////        IT0  = 1;
        ES   = 1;   //  
        IP   = 0x10;
        TR1  = 1;
       
        TR0  = 1;
        OE=0;
        ST=0;
        ST=0;
        ST=1;
        ET0=1;   /**/
        EA   = 1;
//        TI=1;
        //delay_ms(300);
//delay_ms(500);
//delay_ms(1000);
//delay_ms(1000);
        while(1)
        {
        //        led=0;
#if 1
        delay_ms(10);
        if(Buf_Index>0) {
        if(Buf_Index < 4) {
//                        if(Buf_Index == 3)rnum = (Receive_Buffer[0]-'0')*100+(Receive_Buffer[1]-'0')*10+(Receive_Buffer[2]-'0');
//                        else if(Buf_Index == 2)rnum = (Receive_Buffer[0]-'0')*10+(Receive_Buffer[1]-'0');
//                        else rnum = (Receive_Buffer[0]-'0');
                        if(Buf_Index == 3)rnum = (Receive_Buffer[0]-48)*100+(Receive_Buffer[1]-48)*10+(Receive_Buffer[2]-48);
                        else if(Buf_Index == 2)rnum = (Receive_Buffer[0]-48)*10+(Receive_Buffer[1]-48);
                        else rnum = (Receive_Buffer[0]-48);
                if(rnum<256) {
               
                                SendString(Receive_Buffer);
                        for(ii=0;ii<sizeof(Receive_Buffer);ii++)Receive_Buffer[ii]=0;
                        Buf_Index=0;

               
                }
                else {
                                for(ii=0;ii<sizeof(Receive_Buffer);ii++)Receive_Buffer[ii]=0;
                        Buf_Index=0;
               
                }

        rnum = 0;
        }
        else {
                        for(ii=0;ii<sizeof(Receive_Buffer);ii++)Receive_Buffer[ii]=0;
                        Buf_Index=0;
        }
}

          if(EOC==1);
           {
           OE=1;  
           cc=P1;
           OE=0;
           ST=0;
           ST=1;
           ST=0;

           }
           display();
#endif
        }
}
void Serial_INT() interrupt 4
{
        uchar c;
        if(RI==0)
                return;
        //ES = 0;
        RI = 0;
        c  = SBUF;
        if(c>='0' && c<='9')
        {
                Receive_Buffer[Buf_Index] = c;
                Buf_Index++;
                if(Buf_Index>10)Buf_Index=0;
        }
//        ES = 1;
}

IMG_20200518_231114.png (126.78 KB, 下載次數: 32)

IMG_20200518_231114.png
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:267719 發表于 2020-5-19 11:02 | 只看該作者
硬件晶振沒給數值。導致未知波特率。
回復

使用道具 舉報

板凳
ID:267719 發表于 2020-5-19 11:16 | 只看該作者
另建議31腳EA接高電平,數碼管選共陰。你要用模擬終端調試,那模擬終端的TXD應該接到MCU的RXD,模擬終端的RXD應該接到MCU的TXD。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一级黄在线观看 | 成人激情视频免费在线观看 | 精品国产高清一区二区三区 | 国产ts人妖系列高潮 | 国产日韩一区二区三免费高清 | 欧美九九九 | 无码日韩精品一区二区免费 | 中文字幕一级毛片 | 日韩高清一区 | 久久国产一区 | 国产成人精品久久二区二区91 | 日韩精品在线一区 | 国产精品国产三级国产aⅴ原创 | 视频在线h | 欧美区日韩区 | 精品影视| 性色在线| 久久伊人影院 | 成人日韩 | 精品一区二区三区四区五区 | 国产在线精品一区二区三区 | 日韩视频在线播放 | 性国产丰满麻豆videosex | 日本久久精品 | 亚洲欧美日韩国产综合 | 亚洲精品成人 | 亚洲精品国产偷自在线观看 | 日韩免费av网站 | 欧美成人猛片aaaaaaa | 成人在线视 | 国产成人一区二区三区 | av一级在线观看 | 精品国产伦一区二区三区观看体验 | 欧美视频免费在线观看 | 日韩久久久久 | 欧美日韩一区二区三区四区 | 91中文在线观看 | 天天操天天摸天天爽 | 国产成人精品视频在线观看 | 久久不卡 | 成人免费看片网 |