第一讲 过渡题

LED模块

Led 在蓝桥杯的板子里 led是P0 然后P0是很多硬件的入口 如果我们重复给P0口重新赋值的话,就会造成混论 影响其他的功能 所以写了一个Led底层 只给一次 如果不改变它的变量 就不给p值

Led模块

#include <Led.h>

void Led_Disp(unsigned char addr,enable)
{
	static unsigned char temp = 0x00;//静态工作变量 每次值进来不会被刷新
	static unsigned char temp_Old = 0xff;//temp和teemp_old不一样才能对P1赋值
	
	if(enable)//是否开启
		temp |= 0x01 << addr;//0000 0001  (不变 亮)
	else
		temp &= ~(0x01 << addr); //0000 0001   1111 1110(不变 灭)
	if(temp != temp_Old)//如果前一次和后一次的值一样 那就不对P1赋值
	{
		P1 = ~temp;//取反 1-亮 0-灭 好理解 刚开始0000 0000
		temp_Old = temp;
	}

main函数变量声明

unsigned char ucLed[8] = {0,0,0,0,0,0,0,0};//给0熄灭
unsigned char Led_Pos=0;//索引值

在中断中不断刷新调用

if(++Led_Pos == 8) Led_Pos = 0;//Led显示专用
Led_Disp(Led_Pos,ucLed[Led_Pos]);

在Led_Proc()中实现Led的功能 ucLed[ ?] =?

/* 其他显示函数 */
void Led_Proc()
{
	if(Voltage < Voltage_Set)
	{	
		if(Sys_Tick>=5000)
			ucLed[0]=1;
		else
			ucLed[0]=0;
	}
	else
			ucLed[0]=0;
	
	ucLed[1] = Count%2;//奇数取余2为1 偶数取余2为0
	ucLed[2] = Error_Key/3;//大于3整除为1 小于为0
}

KEY模块

二、按键 【S1-S10:0-9】 键盘输入

//输入数据 定义了一个数组存放输入数据 对应有索引值
unsigned char Seg_Input[4]={11,11,11,11};//输入电压数据 默认为杠
unsigned char Seg_Input_Index=0;//输入电压数据指针
unsigned int Error_Key;//错误按键  每次按键有效就=0 错误就++(连续错误)
unsigned char Seg_Mode=0;//0-电压采集界面 1-数据显示界面 2-参数设置界面 3-计数统计界面

//按键 【S1-S10:0-9】 键盘输入 
	if(Key_Down>=1 && Key_Down<=10)
	{
		if(Seg_Mode==0 && Seg_Input_Index<4)
		{
			Seg_Input[Seg_Input_Index] = Key_Down-1;
			Seg_Input_Index++;
			Error_Key=0;
		}
		else
			Error_Key++;
	
	}
	else
		Error_Key++;

三、四舍五入

把输入数组里一个一个的变量变为整体的值 让这个整体的值+5实现“五入”,/最高位的1000.0实现“舍” 定义一个浮点型float变量存储该数

一般要判断一下Vol的值是否符合

float Voltage=0.0;//输入电压 数码管只是单个的数字 保存进系统是要浮点型
unsigned char Seg_Input[4]={11,11,11,11};//输入电压数据 默认为杠
Voltage = ((Seg_Input[0]*1000+Seg_Input[1]*100+Seg_Input[2]*10+Seg_Input[3])+5)/1000.0;
if(Voltage>0.01)//最小值为0.01

四、输入数据

题目:

输入电压是前面按键完成的,S11是保存,所以要看前面是否已经按了四个值

电压采集按键,按下 S11 后进入电压采集界面,可重新采集一次电压值
在电压采集界面按下 S11 后保存当前输入电压值,并返回电压显示界面(若输入数据不符合规范性,则清空数据重新输入

输入的值符合就跳入下一个界面 不符合就索引值清零 输入数组清零复位(用for循环)

switch(Key_Down)
	{
		case 11:
		Error_Key=0;
		if(Seg_Mode==0)//在电压采集界面按下
		{
			/*【输入数据】是否符合规范性*/
			if(Seg_Input_Index >= 4)//一定要四位 你按超过四位也成 但是按小于四位就打回重开
			{
				/*四舍五入*//*输入 保存到实际值中*/
				Voltage = ((Seg_Input[0]*1000+Seg_Input[1]*100+Seg_Input[2]*10+Seg_Input[3])+5)/1000.0;
					if(Voltage>0.01)//最小值为0.01
					Seg_Mode=1;
					else
					{
						Seg_Mode=0;
						/*复位*/
						Seg_Input_Index=0;
						for(i=0;i<4;i++)
						Seg_Input[i] = 11;
					}
			}
			else
			{
				Seg_Mode=0;
				/*复位*/
				Seg_Input_Index=0;
				for(i=0;i<4;i++)
				Seg_Input[i] = 11;
			}
		}
		else//不在 电压采集界面
		{
			Seg_Mode=0;
			/*复位*/
			Seg_Input_Index=0;
			for(i=0;i<4;i++)
			Seg_Input[i] = 11;
		}
		break;

五、保存+三个界面循环切换

case 12://界面切换按键 数据显示-参数设置-计数统计
			if(Seg_Mode!=0)//处于非电压采集界面
			{
				if(Seg_Mode==2)//处于参数设置界面 只有这个采用保存 然后后面就移动++
					Voltage_Param=Voltage_Set;//保存
				if(++Seg_Mode == 4)//三个模式循环切换
					Seg_Mode=1;
				Error_Key=0;
			}
			else Error_Key++;
		break;

SEG模块

一、看图说话 函数

bit VdVp=0;//实际电压(VAIN3)大于电压设置参数(Vp)标志位
unsigned int Count;//计数值
float Voltage=0.0;//输入电压 数码管只是单个的数字 保存进系统是要浮点型
float Voltage_Set=3.0;//输入电压 设置值
float Voltage_Param = 3.0;//实际电压数据显示

/*实际电压(VAIN3)大于电压设置参数(Vp)计数值加一*/
	if(Voltage > Voltage_Set)
		VdVp=1;
	else if(VdVp==1)
	{
		VdVp=0;
		Count++;
	}

else if也包含了Voltage <Voltage_Set的情况

二、小数点 的亮灭

数码管模块

记得Seg.h里也要改!!point!!

定义小数点数组

unsigned char Seg_Point[6] = {0,0,0,0,0,0};//数码管小数点

中断

if(++Seg_Slow_Down == 500) Seg_Slow_Down = 0;//数码管减速专用
	if(++Seg_Pos == 6) Seg_Pos = 0;//数码管显示专用

Seg_Disp(Seg_Pos,Seg_Buf[Seg_Pos],Seg_Point[Seg_Pos]);

把点亮的小数点熄灭 把熄灭的小数点点亮 Seg_Point【小数点点在哪个位】= 亮1灭0

10/10=1  (<10)/10=0          为十位数 小数点向后一位 个位数小数点不移动

三、 浮点型float的数码管显示

四、高位熄灭

有高位熄灭前面要定义unsigned char j=0;

五、显示输入数据

一个数组显示另一个数组   定义一个unsigned char i=0;

中断

一、当***超过5s时就****

在中断服务函数里    定义一个系统时钟  注意Sys 是 unsigned int

在其他函数里判断Sys超过5s就执行相应操作

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值