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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

這個為啥我發兩位數時它顯示這兩位數,但是我發三位數時只顯示我發送的第三位數

[復制鏈接]
跳轉到指定樓層
樓主
ID:654651 發表于 2019-12-5 09:22 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include "reg52.h"                         //此文件中定義了單片機的一些特殊功能寄存器
typedef unsigned int u16;          //對數據類型進行聲明定義
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;                        //設置為工作方式1
        TMOD=0X20;                        //設置計數器工作方式2
        PCON=0X00;                        //波特率不加倍
        TH1=0XF3;                                //計數器初始值設置,注意波特率是2400的
        TL1=TL1;
        ES=1;                                                //打開接收中斷
        EA=1;                                                //打開總中斷
        TR1=1;                                        //打開計數器
}

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;//出去接收到的數據
        RI = 0;//清除接收中斷標志位
}

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

使用道具 舉報

沙發
ID:584814 發表于 2019-12-5 10:49 | 只看該作者
疑似數據溢出或正常,你可以直接在u8 receiveData=0語句中賦值試試。
回復

使用道具 舉報

板凳
ID:396245 發表于 2019-12-5 11:05 | 只看該作者
void display(unsigned char x)//unsigned char占1個字節,最大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位
}

還有注意標紅色的地方,我想你應該能看懂了。
回復

使用道具 舉報

地板
ID:213173 發表于 2019-12-5 11:18 | 只看該作者
串口助手在HEX模式時每次收發16進制一個字節數據,假設你在串口助手里發送123,實際發出的是0x12和0x03,在你的程序中0x12瞬間被0x03覆蓋了,所以就只能顯示第三位數。
回復

使用道具 舉報

5#
ID:654651 發表于 2019-12-5 12:55 | 只看該作者
wulin 發表于 2019-12-5 11:18
串口助手在HEX模式時每次收發16進制一個字節數據,假設你在串口助手里發送123,實際發出的是0x12和0x03,在 ...

那我應該怎樣去解決這個問題
回復

使用道具 舉報

6#
ID:654651 發表于 2019-12-5 12:57 | 只看該作者
SroneBridge 發表于 2019-12-5 11:05
void display(unsigned char x)//unsigned char占1個字節,最大255。超過255的高位將被舍去,0x1234》》0x3 ...

那解決這個問題應該怎么辦
回復

使用道具 舉報

7#
ID:275826 發表于 2019-12-5 14:45 | 只看該作者
要定義一個接收數組,把接收到的字節都存儲
回復

使用道具 舉報

8#
ID:213173 發表于 2019-12-5 21:35 | 只看該作者
liuhengzhi 發表于 2019-12-5 12:55
那我應該怎樣去解決這個問題

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

使用道具 舉報

9#
ID:235200 發表于 2019-12-6 00:39 | 只看該作者
liuhengzhi 發表于 2019-12-5 12:55
那我應該怎樣去解決這個問題

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人久久网 | 一区二区三区免费 | 超碰av人人| 亚洲一区二区三区免费观看 | 中文字幕在线观看视频一区 | 亚洲成人综合在线 | 久久精品亚洲成在人线av网址 | 国产精品久久久久久久久久免费看 | 欧美日韩国产中文 | 天天草天天射 | 色婷婷综合久久久久中文一区二区 | 国产精品久久久久久中文字 | 91精品国产综合久久婷婷香蕉 | 成人免费视频 | 成人免费在线视频 | 成人av在线网站 | 国产日韩精品一区二区三区 | 国产亚洲一级 | 亚洲三区视频 | 天天综合久久 | 天堂资源最新在线 | 国产精品成人一区二区三区 | 久久精品性视频 | 色婷婷激情综合 | 综合久久综合久久 | 亚洲视频 欧美视频 | 午夜影院网站 | 丁香六月伊人 | 国产美女h视频 | 亚洲网站在线 | 日韩欧美在线观看视频网站 | 日韩1区| 国产91精品网站 | 看片地址 | 久久这里只有精品首页 | 一区二区三区在线播放 | 国产精品久久一区二区三区 | 91色视频在线观看 | 亚洲一级淫片 | 欧美国产视频 | 日韩国产黄色片 |