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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3692|回復: 5
收起左側

單片機+74ls164級聯編程問題

[復制鏈接]
ID:373095 發表于 2020-5-10 21:21 | 顯示全部樓層 |閱讀模式
首先,實現單個74ls164點亮共陽數碼管。詳細的74ls164資料網上有,這一步也實現了
#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};

/**********************
* *函 數 名:dispbyte
* *函數功能:取出段碼送入到數碼管顯示
* *返 回 值:無返回值
***********************/
void dispbyte(uchar byte)
{   
         uchar num,i;
         num=tab[byte];//取出段碼
    for(i=0;i<8;i++)   //循環八次送至led數碼管
    {
             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;
    }
}

第二步:通過級聯的方式驅動三個數碼管
程序如下,編譯沒什么問題。就是不知道是不是邏輯上的錯誤,還是程序哪里有問題,仿真不能夠正常運行
#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 全滅    
//函數聲明
void Send_Byte(u8 byte);
void Delay_ms(u16 z);
void Display(u16 number);
//主函數
void main()
{
        while(1)
        {
                 Display(111);
                 Delay_ms(3000);//
                 Display(222);//
                 Delay_ms(3000);
        }        
}
//數碼管顯示函數
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);
}
//發送數據函數
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;
        }
}
//延時函數
void Delay_ms(u16 z)
{
        u16 x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}
仿真運行如圖:

74ls164級聯驅動數碼管

74ls164級聯驅動數碼管




164級聯驅動數碼管

164級聯驅動數碼管
回復

使用道具 舉報

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

第一個數碼管還是現實8,其余兩個分別現實1,1  
                                                           2,2
回復

使用道具 舉報

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

使用道具 舉報

ID:373095 發表于 2020-5-10 22:19 | 顯示全部樓層
已經解決
回復

使用道具 舉報

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

使用道具 舉報

ID:373095 發表于 2020-5-11 07:50 | 顯示全部樓層
可實現代碼如下:
#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 全滅,無小數
u8 code tab1[]={0x02,0x9e,0x24,0x0c,0x98,0x48,0x40,0x1e,0x00,0x08,0xfe};//共陽數碼管,帶小數

u16 code Data[]={323,456,789};
//函數聲明
void dispbyte(u8 byte);
void dispbyte1(u8 Byte);
void Delay_ms(u16 z);
void Display(u16 number);
//主函數
void main()
{
        u8 h;
        while(1)
        {
                for(h=0;h<3;h++)
                {
                         Display(Data[h]);
                         Delay_ms(3000);
//                         Display(222);
//                         Delay_ms(3000);
                }
        }       
}
//數碼管顯示函數
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);
}
//發送數據函數
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;
        }
}
//延時函數
void Delay_ms(u16 ms)
{
        u8 i;
        for(;ms!=0;ms--)
                for(i=0;i<250;i++)
                {
                        _nop_();
                        _nop_();
                        _nop_();
                        _nop_();
                }
}
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产成人99 | 成人一区二区三区 | 欧美精品网站 | 一道本视频| 2018中文字幕第一页 | 欧美日韩最新 | 午夜精品一区二区三区在线观看 | 国产成人免费在线 | 亚洲午夜视频 | 91成人午夜性a一级毛片 | 久久精品视频12 | 国产乱人伦 | 亚洲激情自拍偷拍 | 一区二区福利视频 | 91av在线免费| 妞干网福利视频 | 欧美高清视频 | 欧美成人一级视频 | 欧美日韩国产在线观看 | 国产一级影片 | 在线视频成人 | 精品国产乱码久久久久久丨区2区 | 亚洲成人在线视频播放 | 国产成人综合一区二区三区 | 国产精品成人一区 | 国产91丝袜在线播放 | 手机av免费在线 | 亚洲一区不卡 | 欧美国产日韩精品 | av夜夜操| 日韩视频精品在线 | 神马影院一区二区三区 | 秋霞a级毛片在线看 | 国产精品激情 | 久国产精品| 国产一级淫片免费视频 | 青青草综合网 | 亚洲色图综合 | 亚洲免费在线 | 韩日中文字幕 | 久热国产精品视频 |