找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

為什么我用數(shù)碼管靜態(tài)顯示來點(diǎn)亮LED卻是這樣子?附單片機(jī)程序

[復(fù)制鏈接]
ID:1089508 發(fā)表于 2023-7-24 17:35 | 顯示全部樓層 |閱讀模式
#include <REGX52.H>
unsigned char nixie[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//數(shù)組內(nèi)的每一個(gè)數(shù)據(jù)都用逗號隔開,(數(shù)組)數(shù)據(jù)依舊用中括號括起來
//為什么用的函數(shù)名和下面不一樣?
void nixietable ( unsigned int LO,num)
{        
        switch(LO)    //所有函數(shù)名的括號后都不用加符號
        {
                case 1:  P2_4=0; P2_3=0; P2_2=1;break;
                case 2:  P2_4=0; P2_3=1; P2_2=0;break;
                case 3:  P2_4=0; P2_3=1; P2_2=1;break;
                case 4:  P2_4=1; P2_3=0; P2_2=1;break;
                case 5:  P2_4=1; P2_3=0; P2_2=1;break;
                case 6:  P2_4=1; P2_3=1; P2_2=0;break;
                case 7:  P2_4=1; P2_3=1; P2_2=1;break;
                }
        P0=nixie[num];  //switch是選數(shù)碼第幾個(gè)管來點(diǎn)量(用的P2) P0是提供想點(diǎn)亮的數(shù)
        }
void main ()
{  
         nixietable(3,5);
}
求大佬解答
運(yùn)行成功后板子只會(huì)亮第一個(gè)與第五個(gè)燈 且顯示數(shù)字8  
回復(fù)

使用道具 舉報(bào)

ID:116103 發(fā)表于 2023-7-24 21:47 | 顯示全部樓層
程序缺少主循環(huán)WHILE(1)
回復(fù)

使用道具 舉報(bào)

ID:1010435 發(fā)表于 2023-7-24 22:58 | 顯示全部樓層
因?yàn)闆]有電路圖,是不是第一個(gè)和第五個(gè)燈的位選線連起來了?P2后面應(yīng)該接了個(gè)138之類的譯碼器,而且你的數(shù)碼管是共陰的, P0=nixie[num]; 之后需要消隱,delay個(gè)幾毫秒后讓P0=0;
另外你的case的值驅(qū)動(dòng)138或238都不會(huì)讓第一個(gè)和第五個(gè)燈亮,
你試試這個(gè):
case1 :P2_4=1;P2_3=1;P2_2=0;break;
case2 :P2_4=1;P2_3=0;P2_2=1;break;
case3 :P2_4=1;P2_3=0;P2_2=0;break;
case4 :P2_4=0;P2_3=1;P2_2=1;break;
case5 :P2_4=0;P2_3=1;P2_2=0;break;
case6 :P2_4=0;P2_3=0;P2_2=1;break;
case7 :P2_4=0;P2_3=0;P2_2=0;break;
回復(fù)

使用道具 舉報(bào)

ID:213173 發(fā)表于 2023-7-25 07:09 | 顯示全部樓層
nixietable(3,5);要約束在main函數(shù)內(nèi)運(yùn)行,否則程序跑飛。
#include <REGX52.H>
unsigned char nixie[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//數(shù)組內(nèi)的每一個(gè)數(shù)據(jù)都用逗號隔開,(數(shù)組)數(shù)據(jù)依舊用中括號括起來
//為什么用的函數(shù)名和下面不一樣?
void nixietable ( unsigned int LO,num)
{        
        switch(LO)    //所有函數(shù)名的括號后都不用加符號
        {
                case 0:  P2_4=0; P2_3=0; P2_2=0;break;
                case 1:  P2_4=0; P2_3=0; P2_2=1;break;
                case 2:  P2_4=0; P2_3=1; P2_2=0;break;
                case 3:  P2_4=0; P2_3=1; P2_2=1;break;
                case 4:  P2_4=1; P2_3=0; P2_2=1;break;
                case 5:  P2_4=1; P2_3=0; P2_2=1;break;
                case 6:  P2_4=1; P2_3=1; P2_2=0;break;
                case 7:  P2_4=1; P2_3=1; P2_2=1;break;
        }
        P0=nixie[num];  //switch是選數(shù)碼第幾個(gè)管來點(diǎn)量(用的P2) P0是提供想點(diǎn)亮的數(shù)
}
void main ()
{  
        while(1)
        {
                nixietable(3,5);
        }
}
回復(fù)

使用道具 舉報(bào)

ID:1089508 發(fā)表于 2023-7-25 10:11 | 顯示全部樓層
wys91203 發(fā)表于 2023-7-24 21:47
程序缺少主循環(huán)WHILE(1)

您好,嘗試過您的代碼之后確實(shí)能正常運(yùn)行了,不過想請教一下,這個(gè)while(1)不是一個(gè)空循環(huán)嗎?其里面也無其它語句,為何加上while循環(huán)才可以執(zhí)行成功呢?
回復(fù)

使用道具 舉報(bào)

ID:1089508 發(fā)表于 2023-7-25 10:14 | 顯示全部樓層
mtt661 發(fā)表于 2023-7-24 22:58
因?yàn)闆]有電路圖,是不是第一個(gè)和第五個(gè)燈的位選線連起來了?P2后面應(yīng)該接了個(gè)138之類的譯碼器,而且你的數(shù) ...

謝謝你的解答
回復(fù)

使用道具 舉報(bào)

ID:1089508 發(fā)表于 2023-7-25 10:17 | 顯示全部樓層
wulin 發(fā)表于 2023-7-25 07:09
nixietable(3,5);要約束在main函數(shù)內(nèi)運(yùn)行,否則程序跑飛。
#include
unsigned char nixie[]={0x3F,0x06, ...

好的,謝謝大佬的解答,我想請教一下,num作為函數(shù)nixietable的形參,為什么還能調(diào)用另一個(gè)函數(shù)nixie的實(shí)參呢?
回復(fù)

使用道具 舉報(bào)

ID:116103 發(fā)表于 2023-7-25 10:42 | 顯示全部樓層
num是形參,在nixietable(3,5);語句中,num的實(shí)參是5,通過數(shù)組函數(shù) P0=nixie[num]; 得到數(shù)碼管顯示的段碼。
回復(fù)

使用道具 舉報(bào)

ID:320306 發(fā)表于 2023-7-25 16:10 | 顯示全部樓層
是不是延時(shí)不夠,導(dǎo)致每個(gè)數(shù)碼管都亮了?我只是猜測哈!
回復(fù)

使用道具 舉報(bào)

ID:1089508 發(fā)表于 2023-7-29 14:37 | 顯示全部樓層
zsyzdx 發(fā)表于 2023-7-25 16:10
是不是延時(shí)不夠,導(dǎo)致每個(gè)數(shù)碼管都亮了?我只是猜測哈!

已排除該問題 謝謝
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

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