综合小实验,完整的代码,对前一段学习的总结。
模块化编程去拼接实现自己想要的功能,一键多义用switch语句实现
延时函数delayxms.h
#ifndef __delayxms_h__#define __delayxms_h__#define u16 unsigned int //宏定义#define u8 unsigned char//数据范围0--255 void delayxms(u16 xms);#endifdelayxms.c
/*****************************功能:延时x毫秒*****************************/#include delayxms.hvoid delayxms(u16 xms){ u16 i,j; //unsigned int 类型的数据范围0-65535 for(i=xms;i>0;i--){ for(j=124;j>0;j--); } }共阴极数码管底层显示驱动display.h
#ifndef __display_h__#define __display_h__#include #include delayxms.h#define gpio_seg p1 //段码 io#define gpio_bit p3 //位选 io#define n 4 //数码管的个数extern u8 ledbuf[];//外部引用申明(displayservice.c会用到这个变量)void display();#endifdisplay.c
#include display.hu8 code leddata[]={ //共阴极数码管的段码表0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, //0-9【下标0-9】0x77,0x7c,0x39,0x5e,0x79,0x71, // a-f【下标10-15】0x76,0x38,0x37,0x3e,0x73,0x5c,0x40,//h,l,n,u,p,o,-【下标16-22】0xff};u8 ledbuf[]={23,23,23,23};//数据显示缓冲区,u8 code bitcode[]={0xfe,0xfd,0xfb,0xf7};//位选控制信号 void display(){ /*静态局部变量生命周期:程序结束为止 可以保持变量内容的持久性,函数调用结束时 变量的值仍在*/ static u8 i = 0; //1.送段码 gpio_seg = leddata[ledbuf[i]]; //2.送位选 gpio_bit = bitcode[i]; //3.1ms<延时3) //条件控制 windownum = 0;//最后一个窗口衔接到第一个窗口 break; case 2: //按键key2对窗口中的数据执行加1操作 switch(windownum)//用switch语句判断对第几个窗口进行操作 { case 0: //第一个窗口中的数据 parm1++; if(parm1 > 99)//只能显示2位数,超过99,需要置0 parm1 =0; break; case 1://第二个窗口中的数据 parm1++; if(parm2 > 99) parm2 =0; break; case 2: //第三个窗口中的数据 parm3++; if(parm3 > 99) parm3 =0; break; case 3://第四个窗口中的数据 parm4++; if(parm4 > 99) parm4 =0; break; default: break; } break; case 3: //按键key3对窗口中的数据执行减1操作 switch(windownum)//用switch语句判断对第几个窗口进行操作 { case 0: parm1--; if(parm1 > 99)//变量parm范围0-255,自减小于0会变成255 parm1 =99; break; case 1: parm1--; if(parm2 > 99) parm2 =99; break; case 2: parm3--; if(parm3 > 99) parm3 =99; break; case 3: parm4--; if(parm4 > 99) parm4 =99; break; default: break; } break; case 4: //按键key4对窗口中的数据置0 switch(windownum)//用switch语句判断对第几个窗口进行操作 { case 0: parm1=0; break; case 1: parm2=0; break; case 2: parm3=0; break; case 3: parm4=0; break; default: break; } break; default: break; }}main函数main.c
#include keyservice.hvoid main(){ u16 temp; for(temp=0;temp<100;temp++) { display();//上电显示一段时间画面 } while(1) { displayservice(); key_service(); display(); } }
led恒流驱动电路图AP2402_AP2911芯片的工作原理
SpaceX距离完成全球卫星网络计划又更近了一些
惯性微系统正在朝着三维封装集成架构发展
华为荣耀3C拆机过程高清图集
基于7nm+工艺打造的三星Exynos 990处理器详细介绍
按键控制不同窗口显示实现方法
关于Virtex和Kintex UltraScale架构的FPGA和Vivado开发工具的机构要点
年产销量超过3000万辆 上海新能源汽车排名“全球第一”
对于数据安全云平台有多大的责任
锂电池内部图像
华为M6系列平板有何亮点?
DS18B20和DS18S20的比较1-Wire数字温度计
绝缘电阻如何检测好坏?使用绝缘电阻的注意事项有哪些?
分布式MIMO与无蜂窝移动通信解析
荣耀回归中国智能手机市场TOP 5;高通收购一家瑞典自动驾驶公司……
CDCE 2023国际数据中心展,华为数字能源邀您莅临参观
手提式防爆探照灯的益处是什么,它有哪些优势
MOS管分几种种类?
IC封测预估:第二季比第一季更好
我们的生活是怎样被物联网改变的