河北联合大学校内赛报告。
题目:光控写字绘图板。
成员:谢红波。
班级:12电1
学号:201214070108
我所选的题目叫光控写字绘图板。如图所示,这道题目需要有感光模块,控制模块和显示模块。首先我想阐述一下我对这道题目的理解,撇开控制模块不说,题目要求的是将感光列阵中的元素与显示模块的区域一一对应起来,也就是说假如感光模块有n个感光装置,我需要将显示模块分成n块儿,然后将n个感光装置和n块儿区域对应起来,只要我用激光笔照亮某个感光装置,相应的显示区域就会点亮,这样,我就实现了显示所画图形的功能。
下面我将一一介绍我的硬件功能和相应的程序。
首先,我先介绍我的控制模块。控制模块电路图如上图所示,我的控制模块里面除了单片机及其相应的元件以外,还应用的五个按键来辅助显示模块,还有蜂鸣器拓展单片机功能。按键的功能将在显示模块介绍。
下图所示,是我的感光模块电路图,图中的按键改成光敏电阻。我制作的是6*6的感光阵列利用六个i/o口,因为光敏电阻所产生的电压足够i/o识别,所以电路中的vcc拉高电压的部分没有加上。此电路中每两个i/o口控制两个光敏电阻,因为每一行二极管的加入,使得任意两个i/o口控制的光敏电阻得以区分,本电路的好处是大大减小的对单片机的要求,而且电路简介易焊制。
至于具体如何控制列阵,后面的程序中会有详细的介绍。
最后是我的显示模块,我应用的是诺基亚5110显示屏,显示屏共用到五个i/o口和两条电源线,因为本身所占资源不多,所以我将显示屏加到了我的最小系统板中,上图中的控制模块中可以看到。
以上是我对硬件方面的介绍,下面我将实现相应功能的程序一一介绍。
程序大体分为两部分:感光部分和显示部分。首先,我先介绍感光部分的程序。以下是感光部分的程序,我以对其中第一行的控制为例:
void display1()
p0=0x7e;
temp=p0&0x7e;
if(temp!=0x7e)
temp=p0;
switch(temp)
解析:由上图中的感光电路图可以看出,第一行的光敏电阻都有一个公共端io1,再加上二极管的朝向关系,我选择的检测方法是:不断地拉低公共端之外的其他i/o口,时刻检测io1口;当检测到io1口被拉低时,再加上此时另一个低电平的i/o口即可确定被照亮的光敏电阻。
程序中我用了一个switch语句包含六种i/o口的不同电平来扫描第一行。其中的light0 light1 light2都是显示模块的函数,其功能将在下边介绍;而num变量也是显示时我所想到的一种技巧,将在下面介绍。
现在,我将介绍我的显示部分程序。
void light0(unsigned char x,unsigned char y显示每一大行的上半行。
lcd_set_xy(c+x,y+d);
lcd_write_byte(0x0f,1);
lcd_set_xy(c+x+1,y+d);
lcd_write_byte(0x0f,1显示函数均是显示4*4的点。
lcd_set_xy(c+x+2,y+d);
lcd_write_byte(0x0f,1);
lcd_set_xy(c+x+3,y+d);
lcd_write_byte(0x0f,1);
void light1(unsigned char x,unsigned char y显示下半行。
lcd_set_xy(c+x,y+d);
lcd_write_byte(0xf0,1);
lcd_set_xy(c+x+1,y+d);
lcd_write_byte(0xf0,1);
lcd_set_xy(c+x+2,y+d);
lcd_write_byte(0xf0,1);
lcd_set_xy(c+x+3,y+d);
lcd_write_byte(0xf0,1);
void light2(unsigned char x,unsigned char y显示一整行。
lcd_set_xy(c+x,y+d);
lcd_write_byte(0xff,1);
lcd_set_xy(c+x+1,y+d);
lcd_write_byte(0xff,1);
lcd_set_xy(c+x+2,y+d);
lcd_write_byte(0xff,1);
lcd_set_xy(c+x+3,y+d);
lcd_write_byte(0xff,1);
解析:基于诺基亚5110液晶屏的固有属性:0~83和0~5,也就是说这种液晶屏只能显示六行,这种情况下我无法显示复杂的汉字或图形。
所以我想到了将每行一分为二,整个液晶屏就可以显示12行了,所以就有了程序中“显示上半行”“显示下半行”“显示一整行”这样的区别了,这样就可以满足相对复杂的汉字了。但是这样半行半行的显示也有弊端,因为液晶屏整行整行得纵向取模的缘故,当我想写下半行的时候会对上半行的显示产生影响,比如:显示第一行上半行,令p0=0x0f,显示下半行,令p0=0xf0,此时下半行的显示会将上半行的给抹掉,所以必须建立上半行和下半行的联系。
为了建立联系,我设了36个num变量,每个变量对应一个光敏电阻,若点亮,则相应的变量等于1;同时检测另半行的对应光敏电阻是否点亮(检测相应变量是否等于1即可),若没有被点亮则亮半行,若被点亮则亮整行light2。通过这个方法即可解决两个半行之间的联系问题。
我做的是6*6的列阵,每一行列阵代表半行,所以整个列阵可以显示液晶屏中的三行,明显浪费了空间,所以,我相出了利用按键调整显示位置的做法,上边显示程序中可以看到程序中嵌套的坐标函数中含有变量c和d,利用按键控制c和d的大小就可以控制显示的位置,这样就可以充分利用液晶屏的空间了。
利用上述的方法,我将整个液晶屏分为了8块儿,然后利用按键进行调整位置,如图就是利用这个方法写的。虽然有点丑,但是只是写字手法问题,但是程序理论上是可行的。
制作心得:对于做东西,我觉得并不是非得用上多少好东西,我做东西的理念是利用最简单的元件和最简洁的电路制作出最好的东西,所以,在整个制作中,除了单片机之外,我没有用到任何一个芯片,两块板,一个单片机,一个液晶屏,几个按键,36个光敏电阻就是我所需的全部元件。
整个制作过程可谓是一波三折,电路的挑选就废了很长时间。一开始根据制作寻迹小车的经验挑选了一个比较复杂的电路,后来放弃了,一是所用元件较多成本高,二是我用ad软件画图的时候发现东西太多,根本连不起来。后来根据矩阵按键的经验想到了这个简洁的电路。
程序方面,就显示屏一项我就耗费了不少时间学习,学习如何显示,再到后来不得不学习它的显示原理(点对应的时候必须学会)。我花费精力最多的地方还是如何完善显示,一开始想整行整行得显示,再到半行半行得显示,再到利用按键进行控制,每一步我都付出了汗水,看着我的作品能够完成,我真是打心眼里高兴!
电子板报竞赛通知
word电子板报设计竞赛活动通知。各专业部 2013年市全国科普日主题活动是 保护生态环境 建设美丽,为配合开展好此次活动,增强我校青少年保护生态环境意识 激发学习兴趣 提高审美能力和设计能力,学生工作处 校团委决定在全校范围内举办主题电子板报设计竞赛活动。现将活动通知如下 一 板报设计主题。保护生...
自制电子白板报告
项目2 自制电子白板。1 软硬件环境。软件 windows操作系统 smoothboard pointofix wiimotewhiteboard 硬件 wii手柄 带有蓝牙功能的电脑 红外线光源笔。2 工作原理。wii手柄捕捉红外线光源笔发出的信号,处理信号并将其转换成坐标,计算完成的坐标由wii...
六年级制作电子板报竞赛方案
为了进一步推进小学生信息技术基础知识的普及,培养21世纪具有崇高理想和竞争实力的创新人才,特举办六年级制作电子板报竞赛。一 人员范围 六年级全体在校学生,每班至少2名。二 活动项目 自拟主题电子板报。三 评审内容。思想性 科学性 规范性 主题明确,内容健康向上,能科学 完整地表达主题思想,内容切合作...