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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機+74ls164級聯(lián)編程問題

[復(fù)制鏈接]
ID:373095 發(fā)表于 2020-5-10 21:21 | 顯示全部樓層 |閱讀模式
首先,實現(xiàn)單個74ls164點亮共陽數(shù)碼管。詳細(xì)的74ls164資料網(wǎng)上有,這一步也實現(xiàn)了
#include "reg51.h"
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char

//IO口定義
sbit DAT=P2^7;
sbit CLK=P2^6;


//0-9,-,全滅
//D0 D1 D2 D3 D4 D5 D6 D7
//a  b  c  d  e  f  g  sp
uchar code tab[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,0xff};

/**********************
* *函 數(shù) 名:dispbyte
* *函數(shù)功能:取出段碼送入到數(shù)碼管顯示
* *返 回 值:無返回值
***********************/
void dispbyte(uchar byte)
{   
         uchar num,i;
         num=tab[byte];//取出段碼
    for(i=0;i<8;i++)   //循環(huán)八次送至led數(shù)碼管
    {
             CLK=0;               
                        if(num&0x01)  DAT=1;//判斷最高位,并取出最高位
                        else          DAT=0;//
                   CLK=1;        //上升沿有效
        num>>=1;     //左移一位(每次移動一位,共8次)
    }
}

void delay(uint ms)
{
        uchar i;
        for(;ms!=0;ms--)
                for(i=0;i<250;i++)
                {
                        _nop_();
                        _nop_();
                        _nop_();
                        _nop_();
                }
}

main()
{
    unsigned char h;
        while(1)
        {
      for(h=0;h<11;h++)
      {
                        dispbyte(h);
                        delay(1000);
      }
                h=0;
    }
}

第二步:通過級聯(lián)的方式驅(qū)動三個數(shù)碼管
程序如下,編譯沒什么問題。就是不知道是不是邏輯上的錯誤,還是程序哪里有問題,仿真不能夠正常運行
#include"reg52.h"
#define u16 unsigned int
#define u8 unsigned char
sbit CLK=P2^0;
sbit DAT=P2^1;
u8 code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};//0-9 全滅    
//函數(shù)聲明
void Send_Byte(u8 byte);
void Delay_ms(u16 z);
void Display(u16 number);
//主函數(shù)
void main()
{
        while(1)
        {
                 Display(111);
                 Delay_ms(3000);//
                 Display(222);//
                 Delay_ms(3000);
        }        
}
//數(shù)碼管顯示函數(shù)
void Display(u16 number)
{
        u8 bai,shi,ge;
        /* qian = number/1000;
        Send_Byte(qian); */
        Delay_ms(5);
        bai = number%1000/100;
        Send_Byte(bai);
        Delay_ms(5);
        shi = number%100/10;
        Send_Byte(shi);
        Delay_ms(5);
        ge = number%1000;
        Send_Byte(ge);
        Delay_ms(5);
}
//發(fā)送數(shù)據(jù)函數(shù)
void Send_Byte(u8 byte)
{
        u8 num,d;
        num = tab[byte];
        for(d=0;d<8;d++)
        {
                CLK = 0;
                DAT=num&0x01;
                CLK =1;
                num>>=1;
        }
}
//延時函數(shù)
void Delay_ms(u16 z)
{
        u16 x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}
仿真運行如圖:

74ls164級聯(lián)驅(qū)動數(shù)碼管

74ls164級聯(lián)驅(qū)動數(shù)碼管




164級聯(lián)驅(qū)動數(shù)碼管

164級聯(lián)驅(qū)動數(shù)碼管
回復(fù)

使用道具 舉報

ID:373095 發(fā)表于 2020-5-10 22:05 | 顯示全部樓層
將段碼更改了一下:
tab[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,0xff}

第一個數(shù)碼管還是現(xiàn)實8,其余兩個分別現(xiàn)實1,1  
                                                           2,2
回復(fù)

使用道具 舉報

ID:373095 發(fā)表于 2020-5-10 22:08 | 顯示全部樓層
第二個程序的IO口設(shè)置忘記改了,也是
sbit CLK=P2^6;
sbit DAT=P2^7;
回復(fù)

使用道具 舉報

無效樓層,該帖已經(jīng)被刪除
ID:373095 發(fā)表于 2020-5-10 22:19 | 顯示全部樓層
已經(jīng)解決
回復(fù)

使用道具 舉報

ID:373095 發(fā)表于 2020-5-10 22:20 | 顯示全部樓層
為什么我自己給自己寫評論都要被刪除啊
回復(fù)

使用道具 舉報

ID:373095 發(fā)表于 2020-5-11 07:50 | 顯示全部樓層
可實現(xiàn)代碼如下:
#include"reg52.h"
#include<intrins.h>
#define u16 unsigned int
#define u8 unsigned char
//74ls164IO口定義
sbit CLK=P2^6;
sbit DAT=P2^7;

//
u8 code tab[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,0xff};//0-9 全滅,無小數(shù)
u8 code tab1[]={0x02,0x9e,0x24,0x0c,0x98,0x48,0x40,0x1e,0x00,0x08,0xfe};//共陽數(shù)碼管,帶小數(shù)

u16 code Data[]={323,456,789};
//函數(shù)聲明
void dispbyte(u8 byte);
void dispbyte1(u8 Byte);
void Delay_ms(u16 z);
void Display(u16 number);
//主函數(shù)
void main()
{
        u8 h;
        while(1)
        {
                for(h=0;h<3;h++)
                {
                         Display(Data[h]);
                         Delay_ms(3000);
//                         Display(222);
//                         Delay_ms(3000);
                }
        }       
}
//數(shù)碼管顯示函數(shù)
void Display(u16 number)
{
        u8 bai,shi,ge;
        Delay_ms(5);
        bai = number/100;
        dispbyte(bai);
        Delay_ms(5);
        shi = number%100/10;
        dispbyte1(shi);
        Delay_ms(5);
        ge = number%10;
        dispbyte(ge);
        Delay_ms(5);
}
//發(fā)送數(shù)據(jù)函數(shù)
void dispbyte(u8 byte)
{
        u8 num,d;
        num = tab[byte];
        for(d=0;d<8;d++)
        {
                CLK = 0;
                DAT=num&0x01;
                CLK =1;
                num>>=1;
        }
}

void dispbyte1(u8 Byte)
{
        u8 num,d;
        num = tab1[Byte];
        for(d=0;d<8;d++)
        {
                CLK = 0;
                DAT=num&0x01;
                CLK =1;
                num>>=1;
        }
}
//延時函數(shù)
void Delay_ms(u16 ms)
{
        u8 i;
        for(;ms!=0;ms--)
                for(i=0;i<250;i++)
                {
                        _nop_();
                        _nop_();
                        _nop_();
                        _nop_();
                }
}
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

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