赞
踩
该项目设计的主要用途是小孩子学习时使用的台灯。
打开lcd屏后,界面分为三大块,从左至右,依次是led灯的亮度控制,显示时间和倒计时功能, 计算器功能
首先是led的控制:
在Linux中一切皆是文件,使用文件IO的方式,打开led的文件,通过给文件写入数据来控制灯的亮灭
用两个字节来控制灯的状态,第一个字节来控制灯的亮灭,第二个字节用来控制具体是那个灯,当第二个字节等于8时是指定第一个灯
等于9时是指定第二个灯,等于10时是指定第三个灯,等于12时是同时指定三个灯
然后是显示时间和倒计时功能:
通过设定好的时间,再用取字模的方式用坐标去显示数字出现在需要的位置。
时间下方的倒计时的功能则是,通过使用触摸屏,完成倒计时的时间的加,减和开始倒计时,默认的初始和最低的倒计时的时间是10s
这个时间是定义一个全局变量,通过不断的显示这个变量来显示在屏幕上面的,用手指点击右下方的”+"号,每次点击可以在时间上加10s,
左下角的“-”号可以在时间上减10s。当倒计时的时间倒计为0时,会调用蜂鸣器和sleep延时函数,发出5声“滴”的声音来提醒使用者时间到了。
计算器功能:
这个功能的显示是一张bmp格式的照片,来引导用户点击数字和运算符,这个计算器可以进行简单的加减乘除的四则运算,运算结束后,会将
式子和运算结果显示在上方的显示区域。
这个计算器功是运用数据结构,栈的概念来实现的,将用户按下的数字和运算符用一个数组保存成一个字符串,然后数字入数字栈,符号入符号栈
符号在入栈时,如果是后一个符号的优先级大于前面符号的优先级,会将优先级高的先和数据栈的两个数据出栈计算,计算完之后的数据再入栈,当
遇到左括号时,按正常的优先级顺序入栈,然后继续将括号里面的符号继续按照优先级的顺序入栈,在后面遇到右括号时,就会进行弹栈计算操作,
将左括号后到右括 号前的符号全部弹栈计算,计算完之后的数据再入栈,按这样的规则到最后,符号栈为空,数据栈就只会剩下一个计算完之后的
结果数据。
还有一个功能:超声波测距,接在板子的con2上使用
还有一个功能时超声波测距,超声波传感器使用UART模式来不断返回距离,设定一个阈值,来监控用户的头部离桌面的距离,一旦低于这个阈值,
蜂鸣器则会报警来提醒用户。
bmp的照片头部有54个字节用来保存照片的信息,通过位运算可以查看图片的长和宽,获取图片的位深,24位的照片是由rgb三个字节来显示一个像素
点的,32位则是有argb四个字节来显示一个像素点,所以必须要通过一个判断来区分图片的位深。
以24位深的bmp照片为例,解析像素点时,读取图片的像素点信息,是要从54个字节后读取的,图片的像素点信息都在保存在54个字节之后,计算机保存 数据是通过小端保存的方式保存的,所以在对lcd屏进行映射时要转换成大段模式,可以通过位运算,r << 16 | g <<8 | b的方法转换成大段模式映射到 lcd上。要显示32位深的bmp照片只需要在进行位运算时加上a,既a << 24 | r << 16 | g <<8 | b即可正确的解析32位的bmp照片
所有的文件名称都是由 名字+后缀名 的格式来命名的,所以我们只需要判断一个文件的后缀名是不是bmp就可以了
取一个字的字模,这个字模是标记了一个矩形里面需要点亮的像素点,通过点阵来显示一个字,知道哪些点需要被点亮后,就可以通过lcd画点的方式
将每个需要被点亮的像素点,描绘上颜色就可以成功的显示一个字了。
在计算器的功能中还运用到了链表,通过函数目录操作和区分bmp照片的方法来寻找指定目录下的所有bmp照片,将找到的bmp照片的绝对路径,全部记录 在链表的节点data中,当点击计算机界面中的“换色”时,会由一个遍历指针去寻找下一个节点的data数据,将data保存的照片的绝对路径,输入到照片 显示函数中,达到显示下一个张照片的目的。
链接:https://pan.baidu.com/s/1m5rQXCbi_Sqn79MLR1lxXQ?pwd=qf7x
提取码:qf7x
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。