找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5040|回复: 2
打印 上一主题 下一主题
收起左侧

74HC595驱动8位led数码管的51单片机程序及电路图

[复制链接]
跳转到指定楼层
楼主
ID:90014 发表于 2015-9-15 23:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
电路图如下:



程序如下:

#include <AT89X51.H>

unsigned char code fseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char code segbit[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
unsigned char  disbuf[8]={0,0,0,0,0,0,0,0};


//-----------------------------------------------------------------------------
// 函数原形定义
#define uchar unsigned char

void main (void);                                        // 主函数
void LED4_Display (void);                        // LED显示
void LED_OUT(uchar X);                                // LED单字节串行移位函数

unsigned char code LED_0F[];                // LED字模表

sbit DIO = P1^0;                                //串行数据输入
sbit RCLK  = P1^1;                                //时钟脉冲信号——上升沿有效
sbit SCLK = P1^2;                                //打入信号————上升沿有效

//-----------------------------------------------------------------------------
// 全局变量
uchar LED[8];        //用于LED的8位显示缓存


//*****************************************************************************
// 主程序
//
void main (void)
{

        LED[0]=1;
        LED[1]=2;
        LED[2]=3;
        LED[3]=4;
        LED[4]=5;
        LED[5]=6;
        LED[6]=7;
        LED[7]=8;

        while(1)
        {
                LED4_Display ();
        }
}

void LED4_Display (void)
{
        unsigned char code *led_table;          // 查表指针
        uchar i;
        //显示第1位
        led_table = LED_0F + LED[0];
        i = *led_table;

        LED_OUT(i);                       
        LED_OUT(0x01);               

        RCLK = 0;
        RCLK = 1;
        //显示第2位
        led_table = LED_0F + LED[1];
        i = *led_table;

        LED_OUT(i);               
        LED_OUT(0x02);               

        RCLK = 0;
        RCLK = 1;
        //显示第3位
        led_table = LED_0F + LED[2];
        i = *led_table;

        LED_OUT(i);                       
        LED_OUT(0x04);       

        RCLK = 0;
        RCLK = 1;
        //显示第4位
        led_table = LED_0F + LED[3];
        i = *led_table;

        LED_OUT(i);                       
        LED_OUT(0x08);               

        RCLK = 0;
        RCLK = 1;
        //显示第5位
        led_table = LED_0F + LED[4];
        i = *led_table;

        LED_OUT(i);                       
        LED_OUT(0x10);       

        RCLK = 0;
        RCLK = 1;
        //显示第6位
        led_table = LED_0F + LED[5];
        i = *led_table;

        LED_OUT(i);                       
        LED_OUT(0x20);       

        RCLK = 0;
        RCLK = 1;
        //显示第7位
        led_table = LED_0F + LED[6];
        i = *led_table;

        LED_OUT(i);                       
        LED_OUT(0x40);       

        RCLK = 0;
        RCLK = 1;
        //显示第8位
        led_table = LED_0F + LED[7];
        i = *led_table;

        LED_OUT(i);               
        LED_OUT(0x80);       

        RCLK = 0;
        RCLK = 1;
}

void LED_OUT(uchar X)
{
        uchar i;
        for(i=8;i>=1;i--)
        {
                if (X&0x80) DIO=1; else DIO=0;
                X<<=1;
                SCLK = 0;
                SCLK = 1;
        }
}

unsigned char code LED_0F[] =
{// 0         1          2           3        4         5          6           7        8         9          A           b        C    d          E    F    -
        0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x8C,0xBF,0xC6,0xA1,0x86,0xFF,0xbf
};



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2015-12-28 16:58 | 只看该作者

图中没有HO啊?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

Powered by 单片机教程网

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