码迷,mamicode.com
首页 > 其他好文 > 详细

基于51单片机8位数码管(74HC595芯片)的使用方法

时间:2015-03-09 22:22:35      阅读:276      评论:0      收藏:0      [点我收藏+]

标签:

#include <AT89X51.H>
#include <intrins.h>

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

void main (void);					// 主函数
void LED_OUT(uchar X);				// LED单字节串行移位函数
void LED_print (uchar p, uchar x) ;

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

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

uchar Buffer[4] = {0};          //从串口接收的数据

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

void Delay_1ms(uint i)//1ms延时
{
    uchar x,j;
    for(j=0;j<i;j++)
        for(x=0;x<=148;x++); 
}

void Init(void)
{
    TMOD    = 0x20; //8 位自动重装计数
    PCON   &= 0x7f;
    SCON    = 0x50;//串行口控制寄存器 SM1=1,SM0=0方式一波特率可变
    TH1     = 0xFD; //设置波特率 9600
    TL1     = 0xFD;
    TR1     = 1;    //启动定时器1
    TI      = 0;
    RI      = 0;
    ES      = 1;    //开串口中断
    EA      = 1;    //开总中断
}

// 主程序
void main (void) 
{
    Init();//初始化

    LED_print (0x80, 0x0F); //显示启动信息

    while(1)
	{
        switch(Buffer[0])
        {
            case 0x30: LED_print (0x01, 0);    break;
            case 0x31: LED_print (0x01, 1);    break;
            case 0x32: LED_print (0x01, 2);    break;
            case 0x33: LED_print (0x01, 3);    break;
            case 0x34: LED_print (0x01, 4);    break;
            default  : LED_print (0x80, 0x0E); break; 
        }
    }
} 

void Com_Int(void) interrupt 4
{
    EA = 0;
    if (RI == 1) //当硬件接收到一个数据时,RI会置位
    {
        Buffer[0] = SBUF ; //这里减去48是因为从电脑中发送过来的数据是ASCII码。// 	Buffer[0] = SBUF-48 ;
        RI = 0; 
    }
    EA = 1;
}

void LED_print (uchar p, uchar x) 
{
   	unsigned char code *led_table;          // 查表指针
	uchar i;
	unsigned long loop;

	led_table = LED_0F + x;
	i = *led_table;

	LED_OUT(i);			
	LED_OUT(p);		

	RCLK = 0;
	RCLK = 1;

	for(loop = 0; loop < 230; loop++);
}

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, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E, 0xbf
};

基于51单片机8位数码管(74HC595芯片)的使用方法

标签:

原文地址:http://www.cnblogs.com/motadou/p/4324624.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!