此程序是基于51i单片机开发板上面写的,如需要移植到自己的电路上,修改相应的端口即可
关键字:规范编程 走马灯
引用地址:规范编程——走马灯
/**
***************************************************************************
* @file : led.h
* @author : xr
* @date : 2014年5月15日10:33:21
* @brief : LED头文件
***************************************************************************
* @ttention
* 实验平台 : 51开发板
*
*
***************************************************************************
*/
#ifndef _LED_H_
#define _LED_H_
#include
/* 138译码器配置及LED数据口配置 */
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;
#define LED_DB P0
void ConfigHC138( void );
void LED_Scan( void );
#endif /* _LED_H_ */
/*************************************************END OF FILE******************/
/**
***************************************************************************
* @file : led.c
* @author : xr
* @date : 2014年5月15日10:33:21
* @brief : LED功能文件
***************************************************************************
* @ttention
* 实验平台 : Kingst51开发板
* 单片机 : STC89C52RC MCU
* 晶振频率 : 11.0592 MHZ
***************************************************************************
*/
#include "led.h"
/* 定义跑马灯数组 */
unsigned char code LedTable[] = {
0xE0, // 11100000
0xC1, // 11000001
0x83, // 10000011
0x07, // 00000111
0x0E, // 00001110
0x1C, // 00011100
0x38, // 00111000
0x70 // 11100000
};
/**
* @brief : 138译码器配置
* @param : 无
* @retval : 无
*/
void ConfigHC138( void )
{
/* 配置138译码器选择LEDS6 */
ADDR3 = 1;
ENLED = 0; /* 选择U3 */
ADDR2 = 1;
ADDR1 = 1;
ADDR0 = 0; /* 选择LEDS6 */
}
/**
* @brief : Led小灯扫描
* @param : 无
* @retval : 无
*/
void LED_Scan( void )
{
static unsigned char j = 0;
LED_DB = 0xFF; /* 消隐 */
LED_DB = LedTable[j++]; /* 送入要求的数据到LED显示数据口 */
j &= 0x07; /* 到8归零 */
}
/*******************************************END OF FILE***********/
/**
***********************************************************************
* @file : main.c
* @author : xr
* @date : 2014年5月15日10:27:27
* @version : V1.2.3
* @brief : 跑马灯
***********************************************************************
* @attention
* 实验平台 : Kingst51开发板
* 单片机 : STC89C52RC MCU
* 晶振频率 : 11.0592 MHZ
***********************************************************************
*/
#include
#include "led.h"
/* 定义系统时钟 */
#define SYS_XTAL (11059200/12)
/* 定时器T0高低字节重载值 */
unsigned char thr0, tlr0;
/* 200ms到标志 */
bit flag200ms = 0;
/***********************Local function defines***************************/
void ConfigTimer0(unsigned int xms);
/************************************************************************/
/**
* @brief : 主函数
* @param : 无
* @retval : 无
*/
void main(void)
{
ConfigHC138(); /* 配置HC138译码器选择LED小灯 */
ConfigTimer0(4); /* 定时器T0配置定时4ms */
while (1)
{
if ( flag200ms )
{
flag200ms = 0;
LED_Scan(); /* 扫描LED小灯 */
}
}
}
/**
* @brief : 配置定时器T0
* @param : 无
* @retval : 无
*/
void ConfigTimer0(unsigned int xms)
{
unsigned long tmp;
tmp = (SYS_XTAL * xms) / 1000; /* 定时xms需要的计数值 */
tmp = 65536 - tmp + 13; /* 定时xms需要装入的初值 */
thr0 = (unsigned char)(tmp >> 8);
tlr0 = (unsigned char)tmp;
TMOD &= 0xF0; /* 清零T0控制位 */
TMOD |= 0x01; /* 设定T0工作方式1 */
TH0 = thr0;
TL0 = tlr0;
ET0 = 1; /* 开定时器0中断 */
TR0 = 1; /* 开启定时器T0 */
EA = 1; /* 开总中断 */
}
/**
* @brief : 定时器T0中断服务函数
* @param : 无
* @retval : 无
*/
void Timer0_ISP() interrupt 1
{
static unsigned int counter = 0; /* 计数器 */
TH0 = thr0;
TL0 = tlr0;
counter++;
if ( counter >= 50 )
{
counter = 0;
flag200ms = 1; /* 置位200ms标志位 */
}
}
/******************************************************END OF FILE********/
小广播
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐
最新单片机文章
更多精选电路图
更多热门文章
更多每日新闻
更多往期活动
11月22日历史上的今天
厂商技术中心