74ls47与单片机

来源:百度知道 编辑:UC知道 时间:2024/05/25 00:12:53
各位大虾,我用单片机实现LED数码管显示,单片机P0.0-P0.7口,每四个接口接一个74LS47,74LS47再与一个数码管相接.我现在要在两个数码管分别显示0-9数字,请问我怎样C语言编程把两个数分别显示出来?

有个比较笨拙的办法,就是取表,表里面预先定好00到99的数值,而对于只显示一位的数值则用P0=P0&0XF0或者P0=P0&0XF的办法来取得。

#ifndef _led_h_
#define _led_h_

#include<reg52.h>
#include<intrins.h>

unsigned char ucDigit[] = {0x0E, 0x0D, 0x0B, 0x07}; // 选中不同的数码管
unsigned char ucBuf[4]; // 存放数值缓存
unsigned char code ucCode[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0xff}; //0, 1, 2, 3, 4, 5, 6, 7, 8, 9, off

/********************************************************
**名称:LedDisplay()
**功能:数码管显示数字
**输入:uiDat→显示的数字
**返回:无
**说明:无
********************************************************/
void LedDisplay(unsigned long uiDat)
{
// ucIndex --- 显示索引, 用于标识当前显示的数码管和缓冲区的偏移量
// ucDigit --- 位选通值, 传送到P2口用于选通当前数码管的数值, 如等于0xfe时,选通P2.0口数码管
// ucBuf --- 显示缓冲区基地址
unsigned char ucSum, ucTemp, ucIndex;
ucTemp = 0;
ucSum = 0;

// 计算出8位数码管的值
ucBuf[0] = ucCode[uiDat%10]; // 个位