蓝桥杯单片机竞赛——第8界省赛人机交互界面设计

目录

一、几点说明

二、赛题功能描述(截取自赛题)

三、显示界面分解与程序设计

1、完善显示功能

2、显示界面分解与程序设计

四、键盘功能分解及程序设计

1、S7、S6键功能

2、S5、S4键功能

程序包链接


一、几点说明

1、本例设计在数码管、键盘基础上进行,数码管、键盘设计可以参考博主之前的博文或下载同步配套的资源。

2、人机交互设计中不涉及竞赛中具体的功能模块的调用,如DS1302、18B20、24C02等,竞赛中涉及的功能模块已有单独的博文可以参考。

3、本例以低8界省赛为例,对其它赛题有参考作用。

二、赛题功能描述(截取自赛题)

3.1 初始化

1)关闭蜂鸣器、继电器等无关外设;

2)设备初始化时钟为 23 59 50 秒,闹钟提醒时间 0 0 0 秒。

3.2 显示功能

1) 时间显示格式

2) 温度显示格式

3.3 按键功能

1)按键 S7 定义为时钟设置按键,通过该按键可切换选择待调整的时、分、秒,当前选择的显示单元以 1 秒为间隔亮灭,时、分、秒的调整需注意数据边界属性。

2 按键 S6 定义为闹钟设置按键,通过该按键可进入闹钟时间设置功能,数码管显示当前设定的闹钟时间。

3 按键 S5 定义为按键,在时钟设置闹钟设置状态下,每次按下该按键当前选择的单元(时、分或秒)增加 1 个单位。

4 按键 S4 定义为按键,在时钟设置闹钟设置状态下,

每次按下该按键当前选择的单元(时、分或秒)减少 1 个单位。

5 按键功能说明:

按键 S4 S5 功能只在时钟设置闹钟设置状态下有效;

时钟显示状态下,按下 S4 按键,显示温度数据,松开按键,返回时钟显示界面。

3.4 闹钟提示功能

1)指示灯 L1 0.2 秒为间隔闪烁,持续 5 秒钟; 2)闹钟提示状态下,按下任意按键,关闭闪烁提示功能。

三、显示界面分解与程序设计

1、完善显示功能

    参照以前的博文,在数码管、键盘程序基础上完善显示功能,数码管闪烁、灯闪烁、特殊的显示字符等,这里不再赘述,也可以博文最后的链接下载资源,解读程序。

2、显示界面分解与程序设计

从上面显示要求看,需要有3个显示状态,即时钟设置与显示状态、闹钟设置状态和温度显示状态,3个状态与按键功能配合实现切换。

首先,定义一个变量表示它们,一般用0表示初始状态,本例表示时钟状态,1表示闹钟设置状态,2表示温度显示状态。

其次,根据每个显示状态界面显示的内容定义相对应的变量,根据赛题内容付初值。

然后,在数码管显示程序开头,对显示状态变量进行判断,根据每个状态显示的内容将相应的变量拆分送给数码管显示。程序如下:

//定义相关变量

unsigned char dis_statue=0;//显示状态  0--时钟  1--闹钟设置  2--温度显示

unsigned char hour=23;     //时

unsigned char minute=59;   //分

unsigned char second=50;   //秒

unsigned char hour_S=0;    //闹钟时

unsigned char minute_S=0;  //闹钟分

unsigned char second_S=0;  //闹钟秒

unsigned char temp=21;     //温度

//数码管程序开头添加内容

       switch(dis_statue)//根据显示状态,控制数码管显示

       {

              case 0://时钟

                     Led1=hour/10;   //时拆分显示

                     Led2=hour%10;

                     Led3=11;         //分隔符

                     Led4=minute/10;  //分拆分显示

                     Led5=minute%10;

                     Led6=11;         //分隔符

                     Led7=second/10;  //秒拆分显示

                     Led8=second%10;

                     break;

              case 1://闹钟

                     Led1=hour_S/10;    //闹钟时拆分显示

                     Led2=hour_S%10;

                     Led3=11;          //分隔符

                     Led4=minute_S/10;  //闹钟分拆分显示

                     Led5=minute_S%10;

                     Led6=11;          //分隔符

                     Led7=second_S/10;  //闹钟秒拆分显示

                     Led8=second_S%10;

                     break;

              case 2://温度显示

                     Led1=10;    //灭

                     Led2=10;

                     Led3=10;

                     Led4=10;

                     Led5=10;

                     Led6=temp/10;       //温度拆分显示

                     Led7=temp%10;

                     Led8=12;    //  C

                     break;

    default:break;       

  }

四、键盘功能分解及程序设计

1、S7、S6键功能

S7、S6键功能类似,以S7键为例。

首先,有4个状态进行循环变换,定义一个变量,0为时钟显示状态,1为时修改状态(闪烁),2为分修改状态(闪烁),3为分修改状态(闪烁)。

其次,根据4个状态的要求控制数码管的闪烁、亮灭。

然后,要考虑S7、S6键互锁,即在时钟修改状态S6键无效,同样在闹钟修改状态S7键无效。

最后、考虑在闹钟提示状态,关闭闹钟提示,S7、S6的状态修改功能无效。

S7键的程序如下:

       if(!L1_S)  //判断闹钟提醒状态

       {//非闹钟提醒状态             

              if(S6_statue==0)    //判断S6状态,S6、S7互锁

              {

     S7_statue++;     //S7状态切换

               if(S7_statue==4)S7_statue=0;//0~3切换

                     switch(S7_statue)

                     {

                            case 0:  //退出时钟设置

                                   Led78_S=0;//数码管78闪烁 0--No  1--S

                                   Led78_LM=0;//数码管78亮灭 0--L  1--M

                                   break;

                            case 1:

                                   Led12_S=1;//数码管12闪烁  0--No  1--S

                                   break;

                            case 2:

                                   Led12_S=0;//数码管12闪烁  0--No  1--S

                                   Led12_LM=0;//数码管12亮灭  0--L  1--M

                                   Led45_S=1;//数码管45闪烁   0--No  1--S

                                   break;

                            case 3:

                                   Led45_S=0;//数码管45闪烁   0--No  1--S

                                   Led45_LM=0;//数码管45亮灭  0--L  1--M

                                   Led78_S=1;//数码管78闪烁   0--No  1--S

                                   break;

                            default:break;

                     }

              }

       }

       else {//关闭闹钟提醒

                     L1_5S=0;  //

                     //5S

                     L1_S=0;

                     L1_LM=0;

            }

                     S7_yx=1;//0---No  1--yx
2、S5、S4键功能

S5是加1修改,S4是减1修改,两者功能类似,另外S4键在时钟显示状态按下显示温度,本例以S4键为例。

首先:判断数码管闪烁标志,根据显示状态变量确定是时钟修改还是闹钟修改,对时钟参数或闹钟参数进行修改。

其次:判断在时钟状态下切换为温度显示状态。

然后、考虑在闹钟提示状态,关闭闹钟提示。

最后、在按键松开后恢复为始终显示状态。

S4键功能函数如下:

void S4()

{

       Lie1=0;Lie2=1;Lie3=1;Lie4=1;

       if(Hang4==0)

       {//anxia

        if(!S4_yx)

        {

              S4_js++;

              if(S4_js==30)

              {

                     S4_js=0;

              //功能

       if(!L1_S)//判断闹钟提醒状态

       {            

                     if(Led12_S)//时闪烁

                     {

                            if(dis_statue==0)

                            {//时钟状态

                                   if(hour==0)hour=24;

                                   hour--;

                            }

                            else {//闹钟状态

                                   if(hour_S==0)hour_S=24;

                                   hour_S--;

                                 }

                     }

                     if(Led45_S)//分闪烁

                     {

                            if(dis_statue==0)

                            {//时钟状态

                                   if(minute==0)minute=60;

                                   minute--;

                            }

                            else {//闹钟状态

                                   if(minute_S==0)minute_S=60;

                                   minute_S--;

                                 }

                     }

                     if(Led78_S)//秒闪烁

                     {

                            if(dis_statue==0)

                            {//时钟状态

                                   if(second==0)second=60;

                                   second--;

                            }

                            else {//闹钟状态

                                   if(second_S==0)second_S=60;

                                   second_S--;

                                 }

                     }

                     if((S7_statue==0)&&(S6_statue==0))

                     {//时钟状态进入温度显示

                            dis_statue=2;//0--时钟  1--闹钟设置  2--温度显示

                            S4_yx=1;//0---No  1--yx

                     }

              }

       else {//关闭闹钟提醒

                     L1_5S=0;

                     //5S

                     L1_S=0;

                     L1_LM=0;

           }

       //            S4_yx=1;//0---No  1--yx

              }

        }

       }

       else {//松开

                 S4_js=0;

                 S4_yx=0;//0---No  1--yx

                 if(dis_statue==2)dis_statue=0;//温度显示状态进入时钟状态

            }

}

程序包链接

https://download.csdn.net/download/weikangcekong/89623382

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值