新手上路
- 积分
- 44
- 金钱
- 44
- 注册时间
- 2020-11-26
- 在线时间
- 7 小时
|
任务如下:
3.1 基本功能1)测量竞赛板上电位器 R37 输出的模拟电压信号 VR37,并通过 LCD 实现数据的实时显示。2)通过按键完成显示界面切换、参数设置等功能。3)通过 LED 指示灯完成状态指示功能。4)设计要求 电压数据刷新时间:≤0.5 秒。 按键响应时间:≤0.1 秒。 根据试题要求设计合理的电压数据采样频率,并对 ADC 采样到的电压数据进行有效的数字滤波。
3.2 显示功能1)数据界面通过液晶屏显示三个数据项,包括:界面名称 Data、电位器 R37 输出的电压值 V 和计时结果 T,电压值保留小数点后 2 位有效数字。图 2 数据界面图示2)参数界面通过液晶屏显示三个数据项,包括界面名称 Para、电压参数 Vmax 和Vmin。电压参数保留小数点后 1 位有效数字。图 3 参数界面图示显示说明;显示背景色(BackColor):黑色。显示前景色(TextColor):白色。请严格按照图示要求设计各个信息项的名称(区分字母大小写)和行列位置。计时结果以秒为单位,计时条件下数据实时刷新。 计时说明1)当电位器 R37 的输出电压上升到 Vmin 时,开始计时,直到电压上升到 Vmax结束计时。2)满足开始计时条件,计时时间重置为 0 秒,并以秒为单位开始计时。图 4 计时条件说明 1如图 4 所示的电压变化曲线中,从 t1 时刻开始以秒为单位计时,直到 t2 时刻触发停止计时条件,停止计时;t3 时刻重新触发计时(计时时间重置为 0),直到 t4 时刻停止计时。图 5 计时条件说明 2如图 5 所示的电压变化曲线中,从 t1 时刻开始以秒为单位计时,t2 时刻再次触发计时条件,重置计时时间为 0,直至 t3 时刻结束计时。3.3 按键功能1)B1:界面切换按键,切换选择数据界面或参数界面。2)B2:每次按下 B2 按键,Vmax 参数加 0.1V,当参数加到 3.3V,再次按下B2 后返回 0.0V。3)B3:每次按下 B3 按键,Vmin 参数加 0.1V,当参数加到 3.3V,再次按下B3 后返回 0.0V。4)当设备从参数界面退出,返回数据界面时,自动判断当前设置的参数是否合理,如参数合理则使之生效,如不合理,则弃用本次设置的参数,使用进入参数界面前的原参数。备注: B2 和 B3 按键仅在参数设置界面有效。 要求 Vmax≥ Vmin + 1V。 要求 Vmax、Vmin 可设置范围为 0.0V-3.3V。3.4LED 指示灯功能1)LD1,若当前触发了计时功能,且计时尚未结束,LD1 点亮,否则 LD1 熄灭。2)LD2,若通过按键设置的参数不合理,LD2 点亮,直至下次设置了正确的参数后熄灭。3.5 初始状态说明1)上电后,默认处于数据界面。2)上电默认参数:Vmax: 3.0VVmin: 1.0
- int main(void){ u16 adcx;float max1=0,min1=0;float max2=0,min2=0;float temp;delay_init(); //延时函数初始化
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
- uart_init(115200); //串口初始化为115200
- LED_Init(); //LED端口初始化
- LCD_Init(); Adc_Init(); //ADC初始化
- KEY_Init();TIM3_Int_Init(4999,7199);
- while(1)
- {if(0==a){BACK_COLOR=BLACK;POINT_COLOR=RED;//设置字体为红色
- LCD_ShowString(80,1,200,16,16,"Data"); LCD_ShowString(17,33,200,16,16,"V: . V"); LCD_ShowString(17,50,200,16,16,"T: s"); POINT_COLOR=BLUE;//设置字体为蓝色
- while(a ==0){key_nm=KEY_Scan(0);if(key_nm ==1){a = 1;key_nm=0;}adcx=Get_Adc_Average(ADC_Channel_1,10);temp=(float)adcx*(3.3/4096);adcx=temp;LCD_ShowxNum(30,33,adcx,1,16,0);//显示电压值(整数)
- temp-=adcx;temp*=1000;
- LCD_ShowxNum(46,33,temp,3,16,0X80);////显示电压值(小数)
- LCD_ShowxNum(30,50,nn1,3,16,0);//时间
- LCD_ShowxNum(75,80,a,1,16,0);
- delay_ms(50);}LCD_Clear(WHITE);}else if(a == 1){BACK_COLOR=BLACK;POINT_COLOR=RED;//设置字体为红色
- LCD_ShowString(80,1,200,16,16,"Para"); LCD_ShowString(17,33,200,16,16,"Vmax: . V"); LCD_ShowString(17,50,200,16,16,"Vmin: . V");
- //显示提示信息
- POINT_COLOR=BLUE;//设置字体为蓝色
- while(a ==1){key_nm=KEY_Scan(0);if(key_nm ==1){a = 0;}else if(key_nm == 2){max = max + num;if(max > 3.4) max=0.0;}else if(key_nm == 3){min = min + num;if(min > 3.4) min=0.0;}max1= max;min1= min;max2 = max1;
- LCD_ShowxNum(60,33,max2,1,16,0);//显示电压值(整数)
- max1-=max2;max2*=1000;
- LCD_ShowxNum(82,33,max2,3,16,0X80);////显示电压值(小数)
- min2 = min1;
- LCD_ShowxNum(60,50,min2,1,16,0);//显示电压值(整数)
- min1-= min2;min2*=1000;LCD_ShowxNum(82,50,min2,3,16,0X80);////显示电压值(小数)LCD_ShowxNum(75,80,a,1,16,0);delay_ms(50)key_nm=0;}LCD_Clear(WHITE);}}
复制代码
最后,文件附带完整代码,需要的可以下载
sy.zip
(8.68 MB, 下载次数: 13)
|
|