欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機共陰數碼管想在一個數字上加小數點,用P0|=0x80, 有些數字不能正常顯示

[復制鏈接]
跳轉到指定樓層
樓主
數字069會所有段全亮,其他的數字可以正常顯示,什么原因啊
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:332444 發表于 2019-7-25 20:38 | 只看該作者
回復

使用道具 舉報

板凳
ID:147266 發表于 2019-7-25 21:53 | 只看該作者
你這行代碼是先讀取P0,然后把讀出值的最高位修改為1,再寫入P0……不當

應該這樣:P0 = 顯示數字|0x80
回復

使用道具 舉報

地板
ID:515850 發表于 2019-7-25 21:53 | 只看該作者
你得先把線路圖和程序放出來,不然誰搞得懂你哪里搞錯了
回復

使用道具 舉報

5#
ID:282095 發表于 2019-7-26 01:00 | 只看該作者
還是段選和位選的區別吧
回復

使用道具 舉報

6#
ID:517466 發表于 2019-7-26 01:40 | 只看該作者
既然是程序控制的,毫無疑問是程序的big而已,你細心分析自己的程序以及流程。當然首先要排除硬件電路設計沒有問題。P0|=0x80;這種語句,通常是取得P0口目前的數據,是取得輸入數據,然后B7位置1后重新輸出給P0口,對于動態掃描方式輸出數據給數碼管而言,我覺得這樣處理不妥,反倒是根據輸出的內容,直接把數據輸出給P0口更安全一些。如果你的P0口只接一個數碼管,輸出數據是靜態方式輸出且一直保持不變的話,P0|=0x80;這樣處理沒有問題。
你沒有提供電路,以上意見僅供參考。
回復

使用道具 舉報

7#
ID:56665 發表于 2019-7-26 08:27 | 只看該作者
你這樣就行,P0=顯示數字|0x80; 或者P0=顯示數字+0x80;
回復

使用道具 舉報

8#
ID:423282 發表于 2019-7-26 10:09 | 只看該作者
suncat0504 發表于 2019-7-26 01:40
既然是程序控制的,毫無疑問是程序的big而已,你細心分析自己的程序以及流程。當然首先要排除硬件電路設計 ...

#include "reg52.h"               

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

char code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                                        0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};



void main()
{       
        LSA=0;
        LSB=0;
        LSC=0;
        P0=smgduan[0]|0x80;
        while(1);
}
想做秒表發現加不了點,然后試了試像這樣一個數碼管靜態顯示,也不行啊
回復

使用道具 舉報

9#
ID:423282 發表于 2019-7-26 10:12 | 只看該作者
amo73 發表于 2019-7-25 21:53
你這行代碼是先讀取P0,然后把讀出值的最高位修改為1,再寫入P0……不當

應該這樣:P0 = 顯示數字|0x80

#include "reg52.h"               

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

char code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                                        0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};



void main()
{       
        LSA=0;
        LSB=0;
        LSC=0;
        P0=smgduan[1]|0x80;
        while(1);
}
像這樣呢數字1就好著呢 換成0就不行了
回復

使用道具 舉報

10#
ID:517466 發表于 2019-7-26 22:47 | 只看該作者
這是我咋你的代碼的基礎上做的修改,因為電路設計的問題,輸出到P0口時做了取反處理。可以正常顯示“0.”到“F.”,已經用proteus7.5做了驗證
#include "reg52.h"               

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

char code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                       0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

unsigned char i=0;
                                                                                                                                                               
void delay(void) {
        unsigned int j=0;
        unsigned int k=0;
        for (j=0; j < 300;j++) {
                for (k=0; k < 300;k++) {
                }
        }
}

void main() {        
                LSA=0;
                LSB=0;
                LSC=0;
               
                while(1) {
                        for (i=0; i < 17;i++) {
                                P0=(smgduan[i]|0x80)^0xff;
                                delay();
                               
                        }
                }
}

數碼管.jpg (476.31 KB, 下載次數: 35)

proteus7.5仿真

proteus7.5仿真
回復

使用道具 舉報

11#
ID:423282 發表于 2019-7-27 17:16 | 只看該作者
suncat0504 發表于 2019-7-26 22:47
這是我咋你的代碼的基礎上做的修改,因為電路設計的問題,輸出到P0口時做了取反處理。可以正常顯示“0.”到 ...

超謝謝啊
回復

使用道具 舉報

12#
ID:423282 發表于 2019-7-27 17:46 | 只看該作者
本帖最后由 清無水 于 2019-7-27 20:23 編輯
suncat0504 發表于 2019-7-26 22:47
這是我咋你的代碼的基礎上做的修改,因為電路設計的問題,輸出到P0口時做了取反處理。可以正常顯示“0.”到 ...

找到問題了,是把p3那幾個引腳短路了,不知道咋恢復啊
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表