音乐倒数计时器——单片机课程设计报告
单片机LCD显示的音乐倒数计数器

单片机应用系统设计安装与调试课程设计说明书(论文)设计题目:课程设计所属学院:电气工程学院专业:电气自动化姓名:王洋学号:01班级:电气自动化试点班起讫时间:2012.06.06指导教师:田浩鹏XX职业学院目录摘要 (I)1 项目概述和要求11.1 单片机基础知识11.2 单片机的发展趋势21.3 项目设计任务与要求32 系统设计52.1 框图设计52.2部分硬件方案论述62.3电路原理图62.4元件清单72.4.1AT89C51芯片72.4.2字符型LCD160282.4.3按键控制模块82.4.4其它元件113软件设计93.1 程序流程图93.2 程序关键问题的部分代码114 系统的仿真与调试184.1 硬件调试184.2 软件调试184.3 软硬件调试185总结19参考文献201 项目概述和要求1.1 单片机基础知识单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。
概括的讲,一块芯片就成了一台计算机。
单片机具有体积小、功能强、应用面广等优点,目前正以前所未见的速度取代着传统电子线路构成的经典系统,蚕食着传统数字电路与模拟电路固有的领地。
它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。
同时,学习使用单片机了解计算机原理与结构的最佳选择。
现在,这种单片机的使用领域已十分广泛。
彩电、冰箱、空调、录像机、VCD、遥控器、游戏机、电饭煲等无处不见单片机的影子,单片机早已深深地融入我们每个人的生活之中。
单片机能大大地提高这些产品的智能性,易用性及节能性等主要性能指标,给我们的生活带来舒适和方便的同时,在工农业生产上也极大地提高了生产效率和产品质量。
单片机按用途大体上可分为两类,一种是通用型单片机,另一种是专用型单片机。
MCS-51单片机是美国INTEL公司于1980年推出的产品,与MCS- 48单片机相比,它的结构更先进,功能更强,在原来的基础上增加了更多的电路单元和指令,指令数达111条,MCS-51单片机可以算是相当成功的产品,一直到现在,MCS-51系列或其兼容的单片机仍是应用的主流产品,各高校及专业学校的培训教材仍与MSC-51单片机作为代表进行理论基础学习。
AT89C51单片机设计的音乐倒数计数器解析

塔里木大学《单片机原理与外围电路》课程论文基于单片机设计的音乐倒数计数器姓名:古再丽努尔·阿卜来提学号: **********班级:通信工程16-1摘要:单片机技术是一门不可或缺的技术,对我们将来的工作以及生活和学习都有很密切的联系。
近年来,随着电子技术和微机计算机的迅速发展,单片机的档次不断提高,其应用领域也在不断的扩大,已在工业控制、尖端科学、智能仪器仪表、日用家电、汽车电子系统、办公自动化设备、个人信息终端及通信产品中得到了广泛的应用,成为现代电子系统中最重要的智能化的核心部件。
单片机由CPU、一定容量的RAM和ROM构成,定时、计数和多种接口于一体的微控制器。
它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上。
而51系列单片机是各单片机中最为典型和最有代表性的一种。
这次课程设计通过对它的学习、应用,从而达到学习、设计、开发软、硬的能力。
本设计利用AT89C51单片机结合字符型LCD显示器设计一个简易的倒数计数器。
用4个按键操作来设置当前想要倒计数的时间。
做一小段时间倒计数,当倒计数为0时,则发出一段音乐声响,通知倒计数终了,该做应当做的事。
应用Proteus的ISIS软件和Keil uVision3来实现该计数器的设计与仿真。
该方法仿真效果真实、准确,节省了硬件资源。
该多功能计数器可以应用于一般的生活和工作中,也可以通过改装,提高性能,增加新功能,从而给人们的生活和工作带来更多的方便。
关键词:AT89C51,计数器,键盘控制,LCD显示,protues,Keil 。
目录1绪论 (4)1.1课题背景及研究意义 (4)1.2国内外现状 (4)1.3课题的设计目的 (4)1.4课题的主要工作 (4)2系统概述 (5)2.1方案论证 (5)2.2系统设计原理 (5)3系统硬件设计 (5)3.1主控电路设计 (5)3.2LCD液晶显示器接口电路设计 (6)4系统软件设计 (6)4.1主程序设计 (6)4.2硬件调试 (8)4.3仿真结果 (16)结论 (16)参考文献 (17)系统整体电路.............................................................................................错误!未定义书签。
基于c语言单片机倒数计时器课程设计

课程设计报告课程名称:单片机报告题目:倒数计数器学生姓名:所在学院:专业班级:学生学号: 14指导教师:2013年12月25 日课程设计任务书摘要本设计是基于AT89C51单片机的倒数计数器,根据单片机技术原理,主要通过软件设计,制作出的倒数计数器能稳定运行,并当计数完成时能发出声音.本设计主要用到数码管,LED灯,键盘,蜂鸣器,定时器/计数器等学习单片机中所必须掌握的部分.利用Keil uVision4作为编程软件进行源程序设计及调试。
同时利用STC-ISP-V483作为程序下载器,将源程序烧入单片机中。
关键词:单片机键盘计数器蜂鸣器 LED灯数码管目录一、概述 (1)二、设计方案 (2)1方案总体思路 (2)2.程序流程图 (2)三、程序 (3)四、总原理图及元器件清单 (4)五、结论与心得 (6)六、参考文献 (6)一、概述单片机是20世纪中期发展起来的一种面向控制的大规模集成电路模块,具有功能强、体积小、可靠性高、价格低廉等特点,在工业控制、数据采集、智能仪表、机电一体化、家用电器等领域得到了广泛的应用,极大的提高了这些领域的技术水平和自动化程度。
AT89C51是一种低功耗、高性能CMOS8位微控制器,具有8K 在线系统可编程Flash 存储器。
使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得AT89C51为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
本例利用AT89C51单片机设计一个简易的倒数计数器,可用来煮方便面、煮开水或小睡片刻等。
做一小段时间倒计数,当倒计数为0时,则发出声响,通知倒计数终了。
二、设计方案1. 方案总体思路用8051单片机控制程序执行,通过LED动态扫描来显示倒计时。
买次执行中断时判断计时是否继续倒计时,同时通过按键扫描的方式来判断是否有输入更改倒计时的控制信息。
音乐倒数计数器ds

黄河科技学院课程设计报告书题目: 音乐倒数计数器课程:单片机课程设计专业:数控技术班级:学号:学生:指导教师:何春霞2013年01 月 6 日摘要本设计是基于AT89C52单片机的音乐倒数计数器,根据单片机技术原理,通过硬件电路设计与软件设计,制作出的音乐倒数计数器能稳定运行,并能正常播放音乐。
该设计硬件部分主要包括按键电路、复位电路、LCD显示电路以及蜂鸣器组成,其中K1键作为第二功能键加入外部中断0,用以切换时间选择模式。
计数值为零时,通过定时器T1调节音频,是蜂鸣器发出不同的音调。
本设计利用Keil uVision4作为编程软件进行源程序设计及调试,同时使用PROTEUS7.7进行硬件电路的搭建仿真。
关键字:单片机音乐计数器proteus 蜂鸣器目录1 任务提出与方案论证 (7)1.1 采用555定时器 (7)1.2 采用单片机控制............. . (7)2 总体设计 (8)2.1 系统硬件设计 (8)2.2 系统软件设计 (8)3 详细设计及仿真 (9)3.1硬件电路详细设计 (9)3.2软件详细设计 (12)3.3 系统仿真 (14)4 总结 (16)参考文献 (17)附录 (18)1 任务提出与方案论证21世纪电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,而作为创新的倒数计数器更是在普通家庭中广泛应用。
1.1采用555定时器555定时器是一种模拟和数字功能相结合的中规模集成器件。
555定时器的功能主要由两个电压比较器决定。
两个电压比较器的输出电压控制RS触发器和放电管的状态。
在电源与地之间加上电压,当5脚悬空时,则电压比较器A1的反相输入端的电压为2VCC/3,A2的同相输入端的电压为VCC/3.若触发输入端TR的电压小于VCC/3,则比较器A2的输出为1,可使RS触发器置1,使输出端OUT=1.如果阈值输入端TH的电压大于2VCC/3,同时TR端的电压大于VCC/3,则A1的输出为1,A2的输出为0,可将RS触发器置0,使输出为0电平。
单片机倒计时设计报告

8段数码管
第三章原理图仿真
第四章倒计时程序
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//八位位选码表p2口
本篇论文讨论了简单的倒计时器的设计与制作,对于倒计时器中的LED数码显示器来说,我为了简化线路、降低成本,采用以软件为主的接口方法,即不使用专门的硬件译码器,而采用软件程序进行译码。
第一章设计目的及要求
1.1设计目的
课程设计是单片机课程教学的最后一个环节,是对学生进行全面的系统的训练。进行课程设计可以让学生把学过的比较零碎的知识系统化,真正的能够把学过的知识落到实处,能够开发简单的系统,也进一步激发了学生再深一步学习的热情,因此课程设计是必不可少的,是非常必要的。
前言
在生活和生产的各领域中,凡是有自动控制要求的地方都会有单片机的身影出现;从简单到复杂,从空中、地面到地下,凡是能想像到的地方几乎都有使用单片的需求。现在尽管
单片机的应用已经很普遍了,但仍有许多可以用单片机控制而尚未实现的项目,因此,单片机的应用大有想像和拓展空间。
单片机就是微控制器,它是嵌入式系统中的重要且发展迅速的组成部分。单片机接上震荡元件(或震荡源)、复位电路和接口电路,载入软件后,可以构成单片机应用系统。将它嵌入到形形色色的应用系统中,它就成为众多产品、设备的智能化核心。所以,生产企业称单片机为“微电脑”。
课程设计是提高学生单片机技术应用能力以及文字总结能力的综合训练环节,是配合单片机课程内容掌握、应用得的专门性实践类课程。通过典型实际问题的实际,训练学生的软硬件的综合设计、调试能力以及文字组织能力,建立系统设计概念,加强工程应用思维方式的训练,同时对教学内容做一定的扩充。
倒数计数器单片机课程设计

2.4.4按键控制模块
按键用于控制数码显示、LCD显示、扬声器等模块的工作。通过扫描按键是否按下,来设定各模块的工作情况,使各模块可以在按键的控制下,有序地进行工作。设计中使用单个按键实现单个功能,属于较为简单的控制方式,在多功能系统设计的试验中我们使用四个按键分别与单片机的p1.0、p1.1、p1.2、p1.3相连。通过按下相应的按键来处理相应的程序。如下图6所示。
图6 按键控制模块图
2.4.5其它元件
其它元件图如下图7所示。
图7 其他元件图
2.5绘制中遇到的问题及解决办法
在绘图的过程中主要出现的问题是有些元器件在protues中找不到,出现这样的问题是对protues软件的应用不是很熟悉,当遇到找不的元器件时,就只有通过网络来查找。
第三章系统软件设计
3.1软件设计
高4位三态、双向数据总线4位
12
DB5
高4位三态、双向数据总线5位
13
DB6
高4位三态、双向数据总线6位
14
DB7
高4位三态、双向数据总线7位(最高位)(也是busy flag)
15
BLA
背光电源正极
16
BLK
背光电源负极
2.4.3晶振电路
时钟是单片机的心脏,单片机各功能部件的运行都是以时钟频率为基准,有条不紊地一拍一拍地工作。因此,时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统稳定性。常用的时钟电路有两种方式,一种是内部时钟方式,另一种是外部时钟方式。
音乐倒数计数器

音乐倒数计数器学院:运算机与操纵工程学院专业班级:自动化 082学号: __________________学生姓名:引言随着人们生活水平的不断提高,单片机操纵无疑是人们追求的目标之一,它给人带来的方便也是不可置否的,人们对它的要求愈来愈高,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从单片机技术入手,一切向着数字化操纵,智能化操纵方向进展。
本设计利用AT89C51单片机结合字符型LCD显示器设计一个简易的倒数计数器,可用来煮方便面、煮开水或小睡片刻等。
做一小段时刻倒计数,当倒计数为0时,那么发出一段音乐声响,通知倒计数终了,该做应当做的事。
1 项目概述和要求设计要求利用数字AT89C51单片机实现倒数计数器的功能,设按时刻后在LED数码管上显示相应的时刻。
其功能和性能指标如下:⑴字符型LCD(16×2)显示器,显示格式为“TIME 分分:秒秒”。
⑵用4个按键操作来设置当前想要倒计数的时刻。
⑶一旦按下键那么开始倒计数,当计数为0时,发出一阵音乐声。
⑷程序执行后工作指示灯LCD闪动,表示程序开始执行,按下操作键K1~K4动作如下:● K1---可调整倒计数的时刻1~60分钟。
● K2---设置倒计数的时刻为5分钟,显示“0500”。
● K3---设置倒计数的时刻为10分钟,显示“1000”。
● K4--设置倒计数的时刻为20分钟,显示“2000”⑸复位后LCD的画面应能显示倒计时的分钟和秒数,现在按K1键,那么在LCD上显示出设置画面。
现在,假设:●按K2键---增加倒计数的时刻1分钟。
●按K2键---减少倒计数的时刻1分钟。
●按K4键---设置完成。
设计方案音乐倒数计数器所倒数的时刻由数字显示,操纵器利用单片机AT89C51。
本设计基于单片机技术原理,以单片机芯片AT89C51作为核心操纵器,通过硬件电路的制作和软件程序的编制,设计制作出一个计数器,包括以下功能:输出时刻,按下键就开始计时,并将时刻显示在LCD1602显示器上。
实习修正版-音乐倒数计数器..

东北石油大学课程设计2014年7 月7 日东北石油大学课程设计任务书课程单片机课程设计题目音乐倒数计数器专业自动化姓名罗宏星学号110601140121(2)显示主要内容:利用AT89C51单片机结合字符型LCD显示器设计一个简易的倒数计数器,做一小段时间倒计数,当倒计数为0时,则发出一段音乐声响。
基本要求:定时闹钟的基本功能如下。
(1)字符型LCD(16 2)显示器。
格式为“TIME 分分:秒秒”。
用4个按键操作来设置当前想要倒计数的时间。
当计数为0时,发出一阵音乐声。
程序执行后工作指示灯LED闪动,表示程序开始执行。
主要参考资料:[1] 张毅刚. 单片机原理及应用[M]. 北京: 高等教育出版社, 2003.[2] 李广第. 单片机基础[M]. 北京: 北京航空航天打学出版社, 2009.[3] 吴金戎. 8051单片机实践与应用[M]. 北京: 清华大学出版社, 2003.[4] 杨文龙. 单片机技术及其应用[M]. 北京: 电子工业出版社, 2008.[5] 王德彪. MCS-51单片机原理及接口技术[M]. 北京: 电子工业出版社, 2005.完成期限2014.6.30-2014.7.4指导教师李艳辉邵克勇专业负责人目录第1章概述 (1)1.1 发展前景 (1)1.2 设计要求 (1)1.3 设计方案 (1)第2章系统结构及主要元器件 (2)2.1 AT89C51单片机 (2)2.2 LCD显示器 (3)第3章硬件设计 (4)3.1 显示电路 (4)3.2 输入电路 (4)3.3 复位电路 (5)3.4 报警电路 (5)第4章软件设计 (6)4.1 程序流程图 (6)4.2程序源代码 (6)第5章系统仿真及调试 (15)5.1 软件调试 (15)5.2软硬件调试 (15)5.3系统仿真 (17)参考文献 (19)第1章概述1.1 发展前景随着人们生活水平的不断提高单片机控制无疑是人们追求的目标之一,它给人带来的方便也是不可置否的,人们对它的要求越来越高,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从单片机技术入手,一切向着数字化控制,智能化控制方向发展。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
仿 真 原 理 图
实 际 电 路 图
倒计时过程:
LED倒计时指示灯:
main.c(主要逻辑) : #define DEBUG 基 本 设 计 代 码
#include <mcs51/8051.h> __code char LEDDigit[] = { 0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71, 0x40 };
#ifdef LED8_REVERSE LED8_B = ~(1<<LED8_REVERSE-i); #else LED8_B = ~(1<<i); #endif #ifdef LED8_B_EN LED8_B_EN = 1; LED8_B_EN = 0; #endif delay(1); } } struct { unsigned char TH, } __code keyc[] = { {0, 0}, {64580/256, 64580 {64684/256, 64684 {64777/256, 64777 {64820/256, 64820 {64898/256, 64898 {64968/256, 64968 {65030/256, 65030 };
TL;
% % % % % % %
256}, 256}, 256}, 256}, 256}, 256}, 256}
struct { char delay; char key; } __code mus[] = { // 通电提示音 {0, -1}, {0, 0}, {4, 1}, {4, 5}, // 时间到音乐 {0, -1}, {0, 0}, #include "mus_littlestar.h" // 结束 {0, -1}, }; char mus_nidx; char shining;
char screen[4], screen_en; // 粗略延时函数,因为led_refresh不需精确延时(毫秒单位) void delay(char ms) { while(ms) { char j; for(j = 123; j; --j) (void)0; --ms; } } #ifdef DEBUG #define LED8_S #define LED8_B #else #define LED8_S #define LED8_B #define LED8_S_EN #define LED8_B_EN #define LED8_REVERSE #endif
// 1 - paused
#define resumetimer() #define starttimer(x) #define stop_shining() char TH1_0, TL1_0; char press[4]; #define KEY_PRESS 2
(timeout_10ms = timeout_s>0 ? 99 : -1) (timeout_s = (x), timeout_10ms = 0) (shining = 0,screen_en = 0xf)
void mus_playnote(char key) { if (key > 0) { TH1 = TH1_0 = keyc[key].TH; TL1 = TL1_0 = keyc[key].TL; } TR1 = (key > 0); } #define SPEAKER_IO #define LED_IO P1_6 P1_7
// 实际电路和仿真指示LED接法不同 #ifdef DEBUG #define led_reset() (LED_IO = 1) #else #define LED_COM_ANODE 1
#define led_reset() #endif
(LED_IO = 0)
inline void keyhandler_0() { system_status = 1; screen_en = 0xf, shining = 0xC; // 分钟闪烁 led_reset(); // power led on } inline void keyhandler_1() { if (!system_status) starttimer(5 * 60); else { if (timeout_s < 3540) timeout_s += 60; else timeout_s = 3599; // 防止溢出 } } inline void keyhandler_2() { if (!system_status) starttimer(10 * 60); else if (timeout_s > 60) timeout_s -= 60; } inline void keyhandler_3() { if (!system_status) starttimer(20 * 60); else stop_shining(), system_status = 0, resumetimer(); } #define __keyhandler(k, id) do{\ if (!k) { \ press[id] += (press[id] <= KEY_PRESS); \ if (press[id] == KEY_PRESS) { \ keyhandler_ ##id(); \ timeout_screen(); \ } \ } else press[id] = 0; \ } while(0)
设 计 方 案
本设计采用 4 位独立按键输入, 仿真和实验板中的电路均为低电平 有效,按键高电平的产生同样需要上拉电阻的支持而不能让针脚悬空 (未知电位) ,其原理图如下图所示:
由于仿真电路和开发板电路中按键均没有接入防抖电路, 因此在程 序编写上需要注意的是按键输入需要加入去抖判定,其设计思路为:由 于抖动信号在电平上是以尖刺的形式出现的, 因此有效的按下一定是持 续充分长时间的的低电平信号,因此通过多次采样,如果均为低电平则 表明确实按下,可以执行相应的按键处理函数,其相关代码为:
系(教研室)负责人
2015 年 10 月
20 日
合肥工业大学课程设计AT89C51 单片机设计一个简易的倒数计数器,可用来煮方便面、煮开水或小 睡片刻等。做一小段时间倒计数,当倒计数为 0 时,则发出一段音乐声响,通知 倒计数终了,该做应当做的事。 定时闹钟的基本功能如下。 字符型 LCD(16*2)显示器。(由于实验板条件有限,换成 8 段数码管显示) 。 显示格式为“TIME 分分:秒秒” 用 4 个按键操作来设置当前想要倒计数的时间。一旦按下键则开始倒计数,当计 数为 0 时,发出一阵音乐声。 程序执行后工作指示灯 LED 闪动,表示程序开始执行,按下操作键 K1~K4 动作 如下。 K1—可调整倒计数的时间 1~60 分钟。 K2—设置倒计数的时间为 5 分钟,显示“0500” 。 K3—设置倒计数的时间为 10 分钟,显示“1000” 。 K4—设置倒计数的时间为 20 分钟,显示“2000” 。 复位后 LCD 的画面应能显示倒计时的分钟和秒数,此时按 K1 键,则在 LCD 上显 示出设置画面。此时,若: a. 按操作键 K2—增加倒计数的时间 1 分钟。 b. 按操作键 K3—减少倒计数的时间 1 分钟。 c. 按操作键 K4—设置完成。
课程设计报告书
( 2015 ~ 2016 学年)
设 学 专
计 院
题 名
目 称
音 乐 倒 数 计 数 器 宣城校区信息工程系 电子科学与技术 12-01 班 高 翔 2012217000 范 琦 2012216977
业 (班 级)
姓 名 (学 号) 起 指 讫 导 日 教 期 师
2015.10.12~2015.10.20 丁贤庆
在实际电路搭建的过程中, 我们首先遇到了八段数码管 LED 残影的 问题,其原因主要是段线和位线的更新是存在一个时间差的,在更新段 线的时候, 由于选择的是上一位, 所以上一位会瞬间出现下一位的影像, 造成残影。解决方法是在更新下一位段线之前先取消选择所有的位,代 码如下所示:
另外实际电路和仿真在段线和位线的连接上是不同的, 实际开发板 电路的段线和位线是分时共用的,通过锁存器再锁到两路信号,其开发 板原理图如下所示:
因此我们设置了两路使能信号输出, 用宏定义区别仿真和实际开发 板电路,这样保证代码的可维护性,并且使代码可以重配置,具体代码 见上。
实 验 步 骤
1、根据设计要求设计单片机原理电路,构思 I/O 口分配和电路约定; 2、在 Proteus 上选择所需要的元件,根据约定绘制仿真电路并连线; 3、根据设计要求、电路约定、I/O 口分配编写 C 语言代码,使用 SDCC 编译器编译并生成供仿真的 hex 文件; 4、在 Proteus 上仿真编译成的 hex 文件,直到仿真满足设计要求; 5、以仿真电路为基础连接实际的开发板电路,并记录相关约定; 6、根据实际开发板电路的约定修改 C 语言代码,并使用编译器编译并 生成供开发板烧写的 hex 文件; 7、反复进行板级测试,直到实物满足设计要求,参数达到设计指标。
P0 P2 P0 P0 P1_4 P1_5 7
// 把screen[0..3]送到段位线上 inline void led_refresh(void) { char i; for(i=0; i<sizeof(screen)/sizeof(char); ++i) { // FIX! 消除重影逻辑[防闪烁] // (先拉高位线/去除选择, 再修改段线和选择位线) LED8_B = ~0U; #ifdef LED8_B_EN LED8_B_EN = 1; LED8_B_EN = 0; #endif // END FIX! if ((screen_en >> i) & 1) LED8_S = LEDDigit[screen[i]]; else LED8_S = 0; #ifdef LED8_S_EN LED8_S_EN = 1; LED8_S_EN = 0; #endif