找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

单片机+74ls164级联编程问题

查看数: 4365 | 评论数: 5 | 收藏 1
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2020-5-10 21:21

正文摘要:

首先,实现单个74ls164点亮共阳数码管。详细的74ls164资料网上有,这一步也实现了 #include "reg51.h" #include<intrins.h> #define uint unsigned int #define uchar unsigned char //IO口定义 sbi ...

回复

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_();
                }
}
ID:373095 发表于 2020-5-10 22:20
为什么我自己给自己写评论都要被删除啊
ID:373095 发表于 2020-5-10 22:19
已经解决
ID:373095 发表于 2020-5-10 22:08
第二个程序的IO口设置忘记改了,也是
sbit CLK=P2^6;
sbit DAT=P2^7;
ID:373095 发表于 2020-5-10 22:05
将段码更改了一下:
tab[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,0xff}

第一个数码管还是现实8,其余两个分别现实1,1  
                                                           2,2

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表