PCA定时器跑马灯
- 格式:doc
- 大小:215.00 KB
- 文档页数:10
单片机闪烁灯跑马灯控制课程设计单片机闪烁灯跑马灯控制课程设计报告一、引言本课程设计旨在通过学习和实践单片机(MCU)编程,实现闪烁灯和跑马灯的控制。
我们将使用嵌入式C语言编程,通过了解单片机的内部结构、电路设计和编程流程,深入理解单片机的工作原理和应用。
二、系统硬件设计本课程设计选用51单片机作为主控芯片,外接8个LED灯和1个按键。
硬件电路设计如下:1.单片机:采用AT89C51,该芯片具有32K字节的Flash存储器,256字节的RAM,以及两个16位定时器/计数器。
2.LED灯:采用普通LED灯珠,与单片机引脚相连,通过编程控制LED灯的亮灭状态。
3.按键:采用机械按键,与单片机的外部中断0(EX0)相连,用于触发闪烁灯和跑马灯的切换。
三、系统软件设计1.闪烁灯模式:在此模式下,8个LED灯将按照一定的频率交替闪烁。
我们可以通过计时器和GPIO口控制LED灯的亮灭状态。
void blink_LED(void) {int i;while(1) {for(i = 0; i < 8; i++) {P1_0 = ~P1_0; // 翻转LED状态delay(500); // 延时,控制闪烁频率}}}2.跑马灯模式:在此模式下,8个LED灯将按照一定的顺序依次点亮。
我们可以通过计时器和GPIO口控制LED灯的亮灭状态。
void marquee_LED(void) {int i;int led_state[8] = {0, 1, 0, 1, 0, 1, 0, 1}; // LED状态数组,初始为交替亮灭while(1) {for(i = 0; i < 8; i++) {P1_0 = led_state[i]; // 设置LED状态delay(50); // 延时,控制跑马灯速度}}}四、按键处理程序我们通过外部中断0(EX0)接收按键信号,当按键按下时,将切换闪烁灯和跑马灯模式。
按键处理程序如下:void EX0_ISR(void) interrupt 0 { // EX0中断服务程序if (key_flag) { // 如果按键已经被按下过if (key_value == 0) { // 如果按键状态为低电平marquee_LED(); // 切换到跑马灯模式key_flag = 0; // 标记按键状态已经改变} else { // 如果按键状态为高电平blink_LED(); // 切换到闪烁灯模式key_flag = 0; // 标记按键状态已经改变}key_value = ~key_value; // 翻转按键状态值} else { // 如果按键还没有被按下过key_value = ~key_value; // 翻转按键状态值if (key_value == 0) { // 如果按键状态为低电平blink_LED(); // 切换到闪烁灯模式key_flag = 1; // 标记按键状态已经改变} else { // 如果按键状态为高电平marquee_LED(); // 切换到跑马灯模式key_flag = 1; // 标记按键状态已经改变}}}。
单片机课程设计(跑马灯设计)专业:电气自动化摘要AT89C51是一种带4K字节闪存可编程可擦除只读存储器)(FPEROM—Flash Programmable and Erasable Read Only Memory 的低电压、高性能CMOS 8位微处理器,即单片机。
AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除1000次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
该设计使用A T89C51芯片作为控制芯片,利用P1口连接8个发光二极管,通过I/O的值控制“跑马灯”的亮灭,以达到显示效果。
开始时所有灯全亮,按下按键S时开始跑马灯,再按下按键S时停止,再按下S时继续,并要求有多种亮暗组合。
时继续,并要求有多种亮暗组合。
按键跑马灯 按键单片机 跑马灯关键词:A T89C51单片机目录摘要 (I)第一章芯片分析和设计概述 (3)第一节 AT89C51芯片分析 (3)第一节第二节 设计概述 (8)第二节第二章硬件电路设计 (9)第三章程序部分设计 (10)参考文献 (18)第一章 芯片分析和设计概述第一节 AT89C51芯片分析ATMEL 的AT89S51是一种高效微控制器,将多功能8位CPU 和闪烁存储器组合在单个芯片中,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
且价廉的方案。
AT89C51AT89C51的芯片引脚图如下:的芯片引脚图如下:图1.1 AT89C51引脚图引脚图各引脚的说明和功能分析如下:各引脚的说明和功能分析如下:VCC VCC:供电电压。
:供电电压。
:供电电压。
GND GND:接地。
:接地。
:接地。
P0口:口:P0P0口为一个8位漏级开路双向I/O 口,每脚可吸收8TTL 门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
时,被定义为高阻输入。
P0P0能够用于外部程序数据存储器,它可以被定义为数据外部程序数据存储器,它可以被定义为数据//地址的第八位。
跑马灯效果的实现一能力拓展训练的内容和要求控制8个指示灯的循环点亮,包括指示灯控制、速度控制和点亮效果控制1.利用CPLD/FPGA器件实现简单的计算机逻辑接口电路(如地址译码电路、硬件加密电路等);2.基于可编程逻辑器件(CPLD或FPGA)实现DSP功能。
通过训练掌握相关的理论知识及实际处理方法,熟练使用常用EDA工具(如Quartus Ⅱ、Matlab/DSP Builder等)和硬件描述语言(如Verilog HDL等)设计所需应用程序、上机调试、模拟仿真、下载到目标芯片上运行验证,并对实验结果进行理论分析。
二设计思路:将8个彩灯共阴接地,阳极分别为EPIC3的8个I/O相连,I/O输出变化的电平来控制彩灯的点亮,流水灯分不同的时段,指示灯有不同的显示模式,开始时刻流水灯从右到左依次点亮,第二时间段LED流水灯从左向右依次熄灭,第三时间段LED流水灯从中间向两端依次点亮,第四时间段LED流水灯从中间到两边依次熄灭,第五时间段LED由1,4亮,然后2,5……以此类推,最后完成一次循环又回到开始时刻,进入第二轮循环,来实现LED流水灯的控制实验。
从LED流水灯的工作原理来看,无论是第一时间还是其他的时间段,LED流水灯点亮还是熄灭,都是一个频率来控制LED流水灯点亮和熄灭的快慢。
只不过这个频率可以在程序中控制,也可以在定义输入引脚时把频率选择不同的频率段。
三原理框图:(1)总体方框图如下:图1 总体方框图(2)细化框图:此次实验主要分两个大模块:控制模块以及功能模块,其中功能模块还有3个子模块,如下所示:图2 细化框图控制模块:主要是通过控制给定系统的时钟频率,可以改变灯亮暗的快慢。
功能模块:即为灯亮暗方式的选择。
四编写程序并仿真第一种方式波形图如下:图3第一个灯开始亮由上述仿真波形可知,仿真后所得的结果与希望的相同,进行下一步:对引脚的锁定。
图4 从左到右依次亮图5 从右向左依次熄灭第二种方式波形图:图6中间两个灯亮图7向两边扩散开来直至全亮图8从两边向中间熄灭第三种方式波形图:图91、4灯亮图101、4;2、5;3、6亮图11全亮后进入下一轮循环五引脚锁定以及功能预测各引脚锁定如下所示:图4 各引脚锁定图功能预测:当引脚锁定完成之后,再编译一次,然后进行下载,当下载完毕后可以发现试验箱上的灯会从左到右依次被点亮,然后又从右向左依次熄灭,之后灯从中间两个开始亮,向两边开始扩散,直至全亮后再从两边向中间逐次熄灭,然后就是灯会以1,4亮,2,5亮,3,6亮,4,7亮此种方式进行,当此次全亮之后,灯开始进入下一轮循环,从左到右依次点亮……如此反复。
跑马灯分析如下:跑马灯电路采用74LS194为核心控制彩灯左移、右移及闪烁功能,围绕74LS194的S1、S0工作的控制方式,S1、S0需要自动周期性的变化,为了实现自动模式转换,设计一个状态计数器,控制彩灯模式转换,利用74153双四选一电路,将S1、S0的状态置入74194,完成周期性地读取。
本设计方案的关键是S1、S0状态信息如何传送给74194,S1、S0状态信息要与整个彩灯控制电路相匹配,不同的S1、S0状态,送入74LS194数据输入端的数据不同,利用74LS153作为数据选通,连接到74LS194数据输入端,不同的工作状态,选通数据输出不同,这是设计的主要关键点之一。
电路中,利用74161完成状态计数工作,每8个时钟脉冲,状态计数器完成加一操作,完成移位方式控制,利用74194完成左移或右移及闪烁功能功能,利用74153完成左右移数据输入选通控制。
根据任务要求列出自动循环状态和74194移位控制工作方式表2。
表2X/0表示电路设计过程中,尽管状态表中取任意态,但在实际电路连接中,取低电平。
彩灯控制器完成左移、右移、闪烁及同时左右移,只需要4种状态,故状态计数器完成模4计数即可。
移位寄存器的工作状态由方式控制字S1、S0决定,查阅74LS194数据手册,确定S1、S0工作方式。
利用表.2,分析S1、S0的状态。
因为彩灯是八路输出,用两片74LS194,其中高位标号为74194B,低位为74194A,所以高位的74LS194工作方式标称为BS1、BS0,低位为AS1、AS0。
将BS1、BS0、AS1、AS0放在一起,用74153将数据状态选通输出即可从表格中可以看出,状态计数器描述计数状态,移位寄存器完成左移、右移、闪烁、左右同时移动功能,且自动循环进行。
2)74153选通电路及74194移位电路控制设计74194功能表该器件具有四种工作方式:同步并行置入、右移、左移、空操作(禁止时钟)。
跑马灯控制系统
一、要求:将8(16)只发光管编队,按要求(点亮与熄灭的时间间隔、亮的灯与灭的
数量、循环的方向)。
二、分析(方案):要实现上述要求,8只发光管的“亮”与“灭”必须可控,因此,
可用单片机通过程序来实现。
三、硬件电路设计:
图1-1 跑马灯电路图
74LS245的真值表为:
根据电路图画出PCB图并制板,焊接。
四、控制软件设计
从硬件电路图和 74LS245真值表可知:P3口上为低电平的管脚对应的发光管亮,现设三只“亮”一只“灭”,且从上向下移动,则控制程序如下:
ORG 0
CLR C ;C是单片机中的进位标志位(在PSW中,PSW.7)
MOV A,#11H ;11H对应00010001B
LOOP: MOV P3,A ;控制发光管“亮三灭一”
LCALL DELAY ;延时
RL A ;移动,准备下一个状态
LJMP LOOP ;循环
DELAY: MOV R0,#0 ;延时子程序
D1: MOV R1,#0
DJNZ R1,$
DJNZ R0,D1
RET
END
五、建议修改:
1、实现准确定时
2、用16只LED实现
3、实现方向的改变
4、实现时间(速度)的改变
5、……。
微机原理课程设计——跑马灯专业计算机科学与技术班级学生同组指导教师目录跑马灯实验 (2)一、实验目的 (2)二、实验要求 (2)1、基本要求 (2)2、提高要求 (2)三、设计思路 (2)四、实验原理 (3)1、8254定时器 (3)(1)计数通道 (3)(3)工作方式(6种) (3)(4)内部结构 (4)(5)引脚 (4)(6)方式控制字 (4)2、并行接口电路8255 (5)(1)3个数据端口 (5)(2)工作方式 (5)(3)方式控制字 (5)(4)内部结构 (6)五、实验原理图 (6)六、实验流程图 (7)七、实验代码 (9)八、实验结果 (14)1、开关都未闭合 (14)2、开关K0闭合 (14)3、开关K1闭合 (14)4、开关K2闭合 (14)九、实验总结 (14)跑马灯实验一、实验目的(1)通过本次实验更加清楚的掌握芯片8255和8254的使用方法和工作原理;(2)编写一个简单的程序来实现最简单的跑马灯;(3)在此基础上来实现本次实验的要求和任务。
二、实验要求1、基本要求采用8254精确定时,LED的点亮规律为LED7—>LED0,每个LED的点亮时间间隔由逻辑电平开关K0、K1和K2选择。
K0的时间间隔为0.5s,K1的时间间隔为1.0s,K2的时间间隔为1.5s,当主机键盘按下任意键时停止演示。
2、提高要求LED灯的点亮规律变成LED7 —>LED0—> LED7。
三、设计思路使用8255的A端口连接开关,以此判断选择哪个定时。
用B口和LED 灯连接,来实现跑马灯开始亮。
使用C口来判断此时CLK是否为下降沿,以此判断此时是不是达到一个周期。
四、实验原理1、8254定时器8254有3个相互独立的计数器通道,计数器0、计数器1和计数器2. (1)计数通道8254每个计数器通道都有3个信号与外界接口:CLK时钟输入信号、GATE 门控输入信号和OUT计数器输出信号;(2)内部数据总线8254内部通过数据总线缓冲期引出8位数据引脚D7~D0,地址引脚A0和A1,控制引脚 RD、WR、CS;(3)工作方式(6种)●方式0:计数结束中断●方式1:可变成单稳脉冲●方式2:频率发生器●方式3:发波发生器●方式4:软件触发选通信号●方式5:硬件触发选通信号(4)内部结构(5)引脚(6)方式控制字D7 D6 D5 D4 D3 D2 D1 D02、并行接口电路8255(1)3个数据端口8255的3个数据端口分成两组进行控制:A组控制端口A和端口C的上半部;B组控制端口B和端口C的下半部。
iar编写stm8跑马灯一、介绍STM8跑马灯的背景和意义STM8是一款高性能、低成本的微控制器,广泛应用于各种嵌入式系统中。
跑马灯是一种常见的显示效果,通过STM8实现跑马灯不仅可以展示微控制器的性能,还能为各种应用场景增添趣味性。
本文将详细介绍如何使用STM8编写跑马灯程序,并分享一些实用技巧。
二、硬件电路设计要点1.选择合适的LED灯珠:根据需求选择合适的LED灯珠,如颜色、亮度、间距等。
2.驱动电路:选用合适的驱动电路,如MOSFET、驱动IC等,以满足LED灯珠的电流需求。
3.连接方式:将LED灯珠正确连接到STM8的GPIO端口。
4.电阻配置:根据LED灯珠的电压和电流要求,合理配置限流电阻。
三、软件编程思路与实现1.初始化GPIO:配置GPIO端口为输出模式,设置初始状态。
2.编写主循环:在主循环中,通过移位或循环移位的方式,切换GPIO端口的输出状态。
3.定时器配置:根据需求设置定时器,实现跑马灯的的速度控制。
4.循环次数与速度调整:根据实际效果调整循环次数和速度,以达到最佳效果。
5.优化:根据实际情况,优化程序,提高运行效率和稳定性。
四、调试与优化1.硬件调试:通过观察LED灯珠的显示效果,检查硬件连接和驱动电路是否正确。
2.软件调试:使用串口或其他调试工具,观察程序运行状态,查找问题。
3.优化:根据实际需求和性能指标,对程序进行优化,提高运行效率和稳定性。
五、总结与展望本文详细介绍了如何使用STM8编写跑马灯程序,通过硬件电路设计和软件编程实现了一款趣味性十足的跑马灯。
在实际应用中,可以根据需求调整LED灯珠、驱动电路和程序,实现更多种跑马灯效果。
微机原理课程设计说明书设计题目:跑马灯学院计算机科学与工程学院专业计算机科学与技术专业班级学生学号同组者指导教师目录一、实验简介.......................................................... - 2 -1、基本要求 ............................................................................. - 2 -2、设计提示 ............................................................................. - 2 -3、进一步设计要求 ................................................................. - 2 -二、实验原理.......................................................... - 2 -1、实验原理描述 ................................................................... - 2 -2、8254芯片............................................................................. - 3 -2.1、8254芯片组成部分 .................................................. - 3 -2.2、8254芯片工作方式 .................................................. - 3 -3、8255芯片............................................................................. - 4 -3.1、8255芯片的组成部分 .............................................. - 4 -3.2、8255芯片工作方式 .................................................. - 6 -4、实验原理图.................................................................................... - 6 -三、实验流程图与源程序...................................... - 6 -1、流程图 ............................................................................... - 6 -1.1、主程序流程图 ...................................................... - 7 -1.2 Appmain 子程序流程图............................................. - 7 -1.3 灯跳转阶段流程图 ..................................................... - 9 -2、源程序(见附录) ................................................................... - 9 -四、实验结果与测试............................................ - 15 -五、实验提高与扩展............................................ - 16 -六、个人心得与体会............................................ - 16 - 附录 .......................................................................... - 18 -一、实验简介:1、基本要求:采用8254精确定时,LED的点亮规律为LED7--->LED0,每一个LED 的点亮时间间隔由逻辑电平开关K1、K2、K3选择,K1的时间间隔为0.5s,K2的时间间隔为1.0s,K3的时间间隔为1.5s。
PCA软件定时器实现跑马灯值得注意的是:与一般的51单片机定时器不同,PCA软件定时/计数方式有2种:①与一般定时器一样的功能,从给定初始值开始计数直到计数到十六进制数0FFFFH后产生定时器溢出以及溢出中断。
②从给定初始值开始计数直到计数到一个给定的比较门限值后产生定时器溢出以及溢出中断。
这里我们采用第二种软件定时器延时方法。
思路:设置PCA定时器的脉冲时钟频率,清计数器并设置比较门限值,使定时时间为50ms;然后设置定时器工作在16位计数器模式;设置使能中断,启动PCA定时/计数器开始计数。
当计数器值与比较门限值相等时,就转到PCA中断程序。
中断时,先关闭中断,并清中断标志;然后清除计数器,并自加计数寄存器,当为20时(20*50ms=1s)则判断第四个灯是否亮过。
若亮过则转第一个灯亮,否则就亮相应的灯,然后再开中断并返回主程序。
若计数寄存器不为20PCA计数器计数频率为11.0592M/12分频=0.9216M,注意,11.0592M是单片机晶体振荡器的振荡频率。
计数周期=1/0.9216M=1.085μs定时时间为50ms时所需计数次数为50ms/1.085μs=46083=B403H流程图如下所示程序如下:;-----------------------------------------------------;定义寄存器地址CMOD EQU 0D9HCCON EQU 0D8HCH EQU 0F9HCL EQU 0E9HCCAPM0 EQU 0DAHCCAP0H EQU 0FAHCCAP0L EQU 0EAHCR EQU CCON.6CCF0 EQU CCON.0;------------------------------------------------------ORG 0000HAJMP MAINORG 0033H ;PCA中断入口AJMP INTVORG 0050HMAIN: MOV CMOD,#00H;设置PCA脉冲时钟为Fosc/12 MOV R0,#0EFHMOV P1,R0MOV R1,#00H;--------------------------------------;PCA计数器清零MOV CH,#00HMOV CL,#00H;--------------------------------------;设置PCA比较/捕获模块寄存器值MOV CCAP0L,#3MOV CCAP0H,#0B4H;--------------------------------------;设置PCA模式为比较:软件定时器MOV CCAPM0,#49HMOV IE,#0C0H ;使能中断SETB CR ;PCA计数器开始计数WAIT: AJMP WAIT ;等待中断;--------------------------------------;中断服务程序INTV: MOV A,IE ;停止中断ANL A,#0BFHMOV IE,ACLR CCF0 ;清中断标志MOV CH,#00H ;清计数器MOV CL,#00HINC R1CJNE R1,#14H,NEXT ;中断20次则执行下面程序,否则到NEXT开中断MOV R1,#00HMOV A,R0RL AMOV R0,ACJNE R0,#0FEH,START ;判断第四个灯没亮过则点亮,否则转到第一个灯MOV R0,#0EFHSTART:MOV P1,R0NEXT: MOV A,IE ;开中断ORL A,#40HMOV IE,ARETIEND/* case 3:{//保存高报警值gas.ErrorValue=gas.TempDataValue;gas.StopTime=0;gas.Menuflag=4;SaveSystemData();}break;case 4:{//零点标定if(stPPMValue<gas.ErrorValue){gas.SystemStatusFlag|=CAL_MIN_FLAG;}gas.StopTime=0;gas.Menuflag=5;}break;case 5:{//量程标定if(stPPMValue>gas.WarnValue){gas.CalibrateValue=gas.TempDataValue;gas.SystemStatusFlag|=CAL_MAX_FLAG;}gas.StopTime=0;gas.Menuflag=0;}break;}gas.KeyValueTime[0]=0;gas.KeyValue=0;}/////////////////////SET键进入/////////////////////* if(gas.KeyValueTime[0]>20){switch(gas.Menuflag){case 0:{ gas.Menuflag=1;gas.TempDataValue=550;}break;case 2:{//保存低报警值gas.WarnValue=gas.TempDataValue;gas.StopTime=0;gas.Menuflag=3;SaveSystemData();}break;case 3:{//保存高报警值gas.ErrorValue=gas.TempDataValue;gas.StopTime=0;gas.Menuflag=4;SaveSystemData();}break;case 4:{//零点标定if(stPPMValue<gas.ErrorValue){gas.SystemStatusFlag|=CAL_MIN_FLAG;}gas.StopTime=0;gas.Menuflag=5;}break;case 5:{//量程标定if(stPPMValue>gas.WarnValue){gas.CalibrateValue=gas.TempDataValue;gas.SystemStatusFlag|=CAL_MAX_FLAG;}gas.StopTime=0;gas.Menuflag=0;}break;}gas.KeyValueTime[0]=0;gas.KeyValue=0;}////////////////////POWER键操作////////////////////if(gas.KeyValueTime[1]>20){switch(gas.Menuflag){case 0:{if((gas.SystemStatusFlag&SYSTEM_START_FLAG)!=SYSTEM_START_FLAG) //开机{gas.SystemStatusFlag|=SYSTEM_START_FLAG;POWER_OFF;}elseif((gas.SystemStatusFlag&SYSTEM_START_FLAG)==SYSTEM_START_FLAG)//关机{gas.SystemStatusFlag&=~SYSTEM_START_FLAG;POWER_ON;}gas.KeyValueTime[1]=0;}break;case 2:{//保存低报警值if(gas.TempDataValue<gas.ErrorValue){gas.TempDataValue++;}else{gas.TempDataV alue=0;}}break;case 3:{//保存高报警值if(gas.TempDataValue<MAX_CALIBRAT_DATA){gas.TempDataValue++;}else{gas .TempDataValue=gas.WarnValue;}}break;case 5:{//量程标定if(gas.TempDataValue<MAX_CALIBRAT_DATA){gas.TempDataValue+=10;}else{g as.TempDataValue=gas.WarnValue;}}break;}gas.KeyValue=0;}//////////////////////按键操作处理////////////////switch(gas.KeyValue){case SMW0:{//设置按键if((gas.SystemStatusFlag&SYSTEM_START_FLAG)==SYSTEM_START_FLAG){if((gas.Menuflag>1)&&(gas.Menuflag<5)){gas.Menuflag++;gas.StopTime=0;}else if(gas.Menuflag==1){gas.Menuflag=1;}else{if(LAMP_ST){mpOnTime=LAMP_TIME_DATA;}else{mpOnTime=0; }//背光控制gas.Menuflag=0;gas.StopTime=0;}}}break;case SMW1:{//电源按键switch(gas.Menuflag){case 0:{//报警控制//if((gas.SystemStatusFlag&WE_RUN_FLAG)==WE_RUN_FLAG)// {if((gas.SystemStatusFlag&WE_STOP_FLAG)==WE_STOP_FLAG){gas.SystemStatusFlag&=~WE_STOP_FLAG;//允许报警}else{gas.SystemStatusFlag|=WE_STOP_FLAG;//停止报警}// }}break;case 1:{//密码修改if(gas.TempDataValue<600){gas.TempDataValue++;}else{gas.TempDataValue=550;} if(gas.TempDataValue==gas.PassWord){gas.Menuflag=2;}}break;case 2:{//低报警值if(gas.TempDataValue<gas.ErrorValue){gas.TempDataValue++;}else{gas.TempDataV alue=0;}}break;case 3:{//高报警值if(gas.TempDataValue<MAX_CALIBRAT_DATA){gas.TempDataValue++;}else{gas .TempDataValue=gas.WarnValue;}}break;case 5:{//量程标定if(gas.TempDataValue<MAX_CALIBRAT_DATA){gas.TempDataValue++;}else{gas .TempDataValue=gas.WarnValue;}}break;}}break;}gas.KeyValue=0;} *//* switch(gas.KeyValue)//按键操作{case SMW0:{ //设置if((fd.ContStatus&SETUP_DATA_FLAG)!=SETUP_DATA_FLAG){fd.ContStatus|=SETUP_DATA_FLAG;}else{fd.ContStatus&=~SETUP_DATA_FLAG;}}break;case SMW_0:{//进入菜单fd.ContStatus|=SETUP_DISPLAY_FLAG;fd.ContStatus&=~SETUP_DATA_FLAG;//显示设置数据fd.Menuflag=0;}break;case SMW1:{//减少if((fd.ContStatus&SETUP_DATA_FLAG)==SETUP_DATA_FLAG){DataAmend(0);}else{if(fd.Menuflag>0){fd.Menuflag--;}else{fd.Menuflag=2;}}}break;case SMW_1:{if(((fd.ContStatus&SETUP_DATA_FLAG)==SETUP_DATA_FLAG)&&(fd.Menufla g==1)){DataAmend(0);}elseif((fd.ContStatus&SETUP_DATA_FLAG)==SETUP_DATA_FLAG)//调零数据保存{if((fd.Menuflag==0)&&(fd.ADCDataBuff<12800)&&(fd.ADCDataBuff>50)){fd.CalMin=fd.ADCDataBuff;fd.ContStatus&=~SETUP_DISPLAY_FLAG; //回到巡检状态fd.ContStatus&=~SETUP_DATA_FLAG;//显示设置数据fd.ContStatus|=DATA_SA VE_FLAG; //数据保存}}}break;case SMW2:{//增加if((fd.ContStatus&SETUP_DATA_FLAG)==SETUP_DATA_FLAG){DataAmend(1);}else{if(fd.Menuflag<2){fd.Menuflag++;}else{fd.Menuflag=0;}}}break;case SMW_2:{if(((fd.ContStatus&SETUP_DATA_FLAG)==SETUP_DATA_FLAG)&&(fd.Menufla g==1)){DataAmend(1);}elseif(((fd.ContStatus&SETUP_DATA_FLAG)==SETUP_DATA_FLAG)&&(fd.Menufla g==2))//标定数据保存{if((fd.Menuflag==2)&&(fd.ADCDataBuff<32760)&&(fd.ADCDataBuff>3200)){fd.CalCalibratMax=fd.ADCDataBuff;fd.ContStatus&=~SETUP_DISPLAY_FLAG; //回到巡检状态fd.ContStatus&=~SETUP_DATA_FLAG;//显示设置数据fd.ContStatus|=DATA_SA VE_FLAG; //数据保存}}}break;case SMW3:{//保持if((fd.ContStatus&DATA_MAX_FLAG)!=DATA_MAX_FLAG){fd.ContStatus|=DATA_MAX_FLAG;}else{fd.ContStatus&=~DATA_MAX_FLAG;}}break;case SMW_3:{}break;} */。