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

QQ登錄

只需一步,快速開始

搜索
查看: 3199|回復(fù): 8
收起左側(cè)

這個(gè)為啥我發(fā)兩位數(shù)時(shí)它顯示這兩位數(shù),但是我發(fā)三位數(shù)時(shí)只顯示我發(fā)送的第三位數(shù)

[復(fù)制鏈接]
ID:654651 發(fā)表于 2019-12-5 09:22 | 顯示全部樓層 |閱讀模式
#include "reg52.h"                         //此文件中定義了單片機(jī)的一些特殊功能寄存器
typedef unsigned int u16;          //對(duì)數(shù)據(jù)類型進(jìn)行聲明定義
typedef unsigned char u8;
u8 receiveData=0;

sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;

u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                                        0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//顯示0~F的值


void delay(u16 i)
{
        while(i--);       
}
void UsartInit()
{
        SCON=0X50;                        //設(shè)置為工作方式1
        TMOD=0X20;                        //設(shè)置計(jì)數(shù)器工作方式2
        PCON=0X00;                        //波特率不加倍
        TH1=0XF3;                                //計(jì)數(shù)器初始值設(shè)置,注意波特率是2400的
        TL1=TL1;
        ES=1;                                                //打開接收中斷
        EA=1;                                                //打開總中斷
        TR1=1;                                        //打開計(jì)數(shù)器
}

void display(unsigned char x)
{
                                LSA=0;LSB=0;LSC=0;P0=smgduan[x%16];delay(100);P0=0x00;//顯示第0位
                                LSA=1;LSB=0;LSC=0;P0=smgduan[x%256/16];delay(100);P0=0x00;//顯示第1位
                            LSA=0;LSB=1;LSC=0;P0=smgduan[x/256];delay(100);P0=0x00;//顯示第2位
}                               
void main()
{       
        UsartInit();  //        串口初始化
        while(1)
        {
                display(receiveData);
        }               
}

void Usart() interrupt 4
{
        receiveData=SBUF;//出去接收到的數(shù)據(jù)
        RI = 0;//清除接收中斷標(biāo)志位
}

回復(fù)

使用道具 舉報(bào)

ID:584814 發(fā)表于 2019-12-5 10:49 | 顯示全部樓層
疑似數(shù)據(jù)溢出或正常,你可以直接在u8 receiveData=0語句中賦值試試。
回復(fù)

使用道具 舉報(bào)

ID:396245 發(fā)表于 2019-12-5 11:05 | 顯示全部樓層
void display(unsigned char x)//unsigned char占1個(gè)字節(jié),最大255。超過255的高位將被舍去,0x1234》》0x34
{
                                LSA=0;LSB=0;LSC=0;P0=smgduan[x%16];delay(100);P0=0x00;//顯示第0位
                                LSA=1;LSB=0;LSC=0;P0=smgduan[x%256/16];delay(100);P0=0x00;//顯示第1位
                                LSA=0;LSB=1;LSC=0;P0=smgduan[x/256];delay(100);P0=0x00;//顯示第2位
}

還有注意標(biāo)紅色的地方,我想你應(yīng)該能看懂了。
回復(fù)

使用道具 舉報(bào)

ID:213173 發(fā)表于 2019-12-5 11:18 | 顯示全部樓層
串口助手在HEX模式時(shí)每次收發(fā)16進(jìn)制一個(gè)字節(jié)數(shù)據(jù),假設(shè)你在串口助手里發(fā)送123,實(shí)際發(fā)出的是0x12和0x03,在你的程序中0x12瞬間被0x03覆蓋了,所以就只能顯示第三位數(shù)。
回復(fù)

使用道具 舉報(bào)

ID:654651 發(fā)表于 2019-12-5 12:55 | 顯示全部樓層
wulin 發(fā)表于 2019-12-5 11:18
串口助手在HEX模式時(shí)每次收發(fā)16進(jìn)制一個(gè)字節(jié)數(shù)據(jù),假設(shè)你在串口助手里發(fā)送123,實(shí)際發(fā)出的是0x12和0x03,在 ...

那我應(yīng)該怎樣去解決這個(gè)問題
回復(fù)

使用道具 舉報(bào)

ID:654651 發(fā)表于 2019-12-5 12:57 | 顯示全部樓層
SroneBridge 發(fā)表于 2019-12-5 11:05
void display(unsigned char x)//unsigned char占1個(gè)字節(jié),最大255。超過255的高位將被舍去,0x1234》》0x3 ...

那解決這個(gè)問題應(yīng)該怎么辦
回復(fù)

使用道具 舉報(bào)

ID:275826 發(fā)表于 2019-12-5 14:45 | 顯示全部樓層
要定義一個(gè)接收數(shù)組,把接收到的字節(jié)都存儲(chǔ)
回復(fù)

使用道具 舉報(bào)

ID:213173 發(fā)表于 2019-12-5 21:35 | 顯示全部樓層
liuhengzhi 發(fā)表于 2019-12-5 12:55
那我應(yīng)該怎樣去解決這個(gè)問題

這是串口收發(fā)數(shù)據(jù)串的問題。在實(shí)際應(yīng)用中串口通訊都是以數(shù)據(jù)串的形式工作。一串完整的數(shù)據(jù)稱作一幀,一幀數(shù)據(jù)包含若干個(gè)字節(jié)。具體有多少字節(jié)是由通訊協(xié)議確定的。最簡(jiǎn)單的自定義通訊協(xié)議通常包含1~2個(gè)字節(jié)的數(shù)據(jù)頭,1~4個(gè)字節(jié)的有效數(shù)據(jù),一個(gè)字節(jié)的數(shù)據(jù)尾(驗(yàn)證數(shù)據(jù))。串口接收中斷函數(shù)一旦收到數(shù)據(jù)頭信息就開啟緩存數(shù)組,按順序保存收到的數(shù)據(jù)。待一幀數(shù)據(jù)接收結(jié)束,產(chǎn)生一個(gè)結(jié)束標(biāo)志。數(shù)據(jù)解析程序按通訊協(xié)議解析收到的數(shù)據(jù)串,經(jīng)控制程序執(zhí)行任務(wù)。如果需要傳輸?shù)挠行?shù)據(jù)值大于255,就需要把這個(gè)數(shù)據(jù)分解為若干字節(jié)傳輸。接收端再把若干字節(jié)合并還原。
回復(fù)

使用道具 舉報(bào)

ID:235200 發(fā)表于 2019-12-6 00:39 | 顯示全部樓層
liuhengzhi 發(fā)表于 2019-12-5 12:55
那我應(yīng)該怎樣去解決這個(gè)問題

如果你要顯示123,就要分2次或3次發(fā),發(fā)送12 和03,接收后還要處理,或發(fā)送01 02 03,分配顯示在3位數(shù)碼管上,如果你直接按16進(jìn)制發(fā),只要發(fā)7B就行了,然后分離出百十個(gè)位
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表