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

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3240|回復(fù): 6
打印 上一主題 下一主題
收起左側(cè)

關(guān)于數(shù)碼管動(dòng)態(tài)掃描的問(wèn)題,請(qǐng)教一下大家!謝謝!

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:404479 發(fā)表于 2018-11-19 11:16 來(lái)自觸屏版 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
我的目的是讓四位共陰級(jí)數(shù)碼管實(shí)現(xiàn)動(dòng)態(tài)掃描。分別顯示0.1.2.3,我是利用一個(gè)138譯碼器來(lái)提供位選,利用一個(gè)74H595實(shí)現(xiàn)段選!兩個(gè)芯片使能端均配置OK,我選用P2.2和P2.3以及P2.4為38譯碼器提供的輸入,用P2.5和P2.6以及P2.7口控制595芯片的移位寄存器時(shí)鐘,存儲(chǔ)寄存器時(shí)鐘,以及輸入!我遇到的問(wèn)題為:
①程序?qū)懭雴纹瑱C(jī),數(shù)碼管能口實(shí)現(xiàn)動(dòng)態(tài)掃描,但是數(shù)碼管顯示的不是0.1.2.3,而是顯示的0.7.8.8,我就搞不懂了,我的段碼是正確的,移位寄存器得子函數(shù)也配置正確的,為什么它會(huì)顯示0.7.8.8呢?首先,面包板接線是沒(méi)問(wèn)題的,要不然他不會(huì)實(shí)現(xiàn)動(dòng)態(tài)掃描,這個(gè)是共陰數(shù)碼管,它有8位,分別是a.b.c.d.e.f.g.h,我是把h最高位接到595芯片的輸出口最高位,把a(bǔ)最低位接到595芯片輸出的最低位,因?yàn)?95芯片移位是先移動(dòng)段碼的最高位到595芯片輸出的的最高位,在依次移動(dòng)次高位,那么我提供595芯片移位子函數(shù)也是正確的,為何明明是顯示0.1.2.3的段碼卻顯示出了0.7.8.8.呢?真心請(qǐng)教一下大家!
以下是程序:

#include <reg51.h>
#include <intrins.h>
typedef unsigned u16;
typedef unsigned u8;
u8 a,b;
sbit LSA=P2^2; //38譯碼器輸入A
sbit LSB=P2^3; //38譯碼器輸入B
sbit LSC=P2^4; //38譯碼器輸入C
sbit yiwei=P2^5; //74H595移位寄存器
sbit chunchu=P2^6; //74H595存儲(chǔ)寄存器
sbit shuru=P2^7; //74H595輸入端
u8 look[]={0x3f,0x06,0x5b,0x4f,0x00};
//數(shù)碼管段碼,4位數(shù)碼管分別顯示0.1.2.3
void delay(u16 z)
{
while(z--); //延時(shí)子函數(shù)
}
void ddr(u8 k) //74H595芯片配置子函數(shù)
{
yiwei=0; //首先把移位和存儲(chǔ)寄存器初始化
chunchu=0;

for(a=0;a<8;a++)//通過(guò)for循環(huán)8次移位
{
shuru=k>>7; //段碼先右移7次,把值賦給輸入
k<<=1; //段碼本身左移一次,次高位變高位
yiwei=1; //給移位寄存器時(shí)鐘一個(gè)上升延
_nop_(); //用機(jī)器周期延時(shí)
_nop_();
yiwei=0; //移位寄存器上升延結(jié)束
}
chunchu=1; //給存儲(chǔ)器時(shí)鐘一個(gè)上升延刷新
_nop_();
_nop_();
chunchu=0;//存儲(chǔ)寄存器上升延結(jié)束
}


void saomiao() //數(shù)碼管動(dòng)態(tài)掃描函數(shù)
{
while(1)
{
for(b=0;b<4;b++) //for循環(huán)4次
{

switch(b)
{
case(0):LSA=0;LSB=0;LSC=0;ddr(look[0]);break;
case(1):LSA=1;LSB=0;LSC=0;ddr(look[1]);break;
case(2):LSA=0;LSB=1;LSC=0;ddr(look[2]);break; case(3):LSA=1;LSB=1;LSC=0;ddr(look[3]);break;
}

delay(200);
ddr(look[4]);// 消隱

}
}
}

void main()
{


saomiao();
while(1);
}


IMG_20181118_192510.jpg (67.76 KB, 下載次數(shù): 52)

IMG_20181118_192510.jpg
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:94031 發(fā)表于 2018-11-19 14:09 | 只看該作者
這里改成:typedef unsigned int  u16; typedef unsigned char u8;
回復(fù)

使用道具 舉報(bào)

板凳
ID:429292 發(fā)表于 2018-11-19 16:49 | 只看該作者
已經(jīng)大三畢業(yè)了,我還是對(duì)單片機(jī)陌生,無(wú)能為力。。
回復(fù)

使用道具 舉報(bào)

地板
ID:411940 發(fā)表于 2018-11-19 17:55 | 只看該作者

這里改成:typedef unsigned int  u16; typedef unsigned char u8;
回復(fù)

使用道具 舉報(bào)

5#
ID:404479 發(fā)表于 2018-11-22 01:28 來(lái)自觸屏版 | 只看該作者
xuyaqi 發(fā)表于 2018-11-19 14:09
這里改成:typedef unsigned int  u16; typedef unsigned char u8;

謝謝!
回復(fù)

使用道具 舉報(bào)

6#
ID:431077 發(fā)表于 2018-11-22 11:29 | 只看該作者
這里改成:typedef unsigned int  u16; typedef unsigned char u8;
回復(fù)

使用道具 舉報(bào)

7#
ID:430677 發(fā)表于 2018-11-22 13:02 | 只看該作者
需要指定u16和u8的類型,比如:typedef unsigned int  u16; typedef unsigned char u8;試試看
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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