锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

规范编程——走马灯

时间:2024-04-26 05:37:09

此程序是基于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 A 0 = P1^0; sbit ADDR1 = P1^1; sbit ADDR2 = P1^2; sbit ADDR3 = P1^3; sbit ENLED = P1^4; #define LED_ 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 * 实验平台 : t51开发板 * 单片机 : C89C52RC * 晶振频率 : 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_I () interrupt 1 { static unsigned int counter = 0; /* */ TH0 = thr0; TL0 = tlr0; counter++; if ( counter >= 50 ) { counter = 0; flag200ms = 1; /* 置位200ms标志位 */ } } /******************************************************END OF FILE********/
-电子元器件采购网(www.ruidan.com)是本土元器件目录分销商,采用“小批量、现货、样品”销售模式,致力于满足客户多型号、高质量、快速交付的采购需求。 自建高效智能仓储,拥有自营库存超过50,000种,提供一站式正品现货采购、个性化解决方案、选型替代等多元化服务。
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章