3具备时间日期切换功能。
4使用仿真软件实现其功能。
1.1.2 发挥部分 1实现闹钟功能。
2其它。
1.1.3 说明 不得用现成的模块和套件。
1.2 系统基本方案 根据题目的要求系统可以划分为显示部分按键处理部分温度采集部分和控制部分。
其中信号检测部分包括温度采集模数转换。
控制部分包括温度采集模块与显示模块。
模块框图如图1.2.1所示。
1.2.1 各模块方案选择和论证 1控制器模块 根据题目的要求控制器主要用于传感器的数据处理和显示处理对于控制器有以下两种方案。
方案一采用FPGA现场可编程序门列阵作为系统的控制器。
FPGA可以实现各种复杂的逻辑功能规模大密度高它将所有的器件集中在一块芯片上减小了体积提高了系统的稳定性并且可以应用EDA仿真、调试易于进行功能扩展但是由于温度处理不需要这么复杂的控制器而且该控制器价格昂贵硬件电路连接有点困难加重了电路设计和实际焊接的工作。
方案二采用STC宏晶公司的STC89C58作为系统控制器的方案。
单片机算术控制器模块 显示模块 温度采集模块 图1.2.1 按键 2 运算能力强软件编程灵活、自由度大可用软件编程实现各种算法和逻辑控制并且由于其功耗低、体积小、技术成熟和成本低等优点使其广泛应用各个领域。
基于上述方案分析控制器模块我们选择STC89C58作为系统控制器的方案。
2温度采集模块 方案一采用热敏温度传感器LM35。
LM35是模拟温度传感器因此需要相应的处理电路但该电路设计复杂对电源要求严格而且还容易受外界因数影响就从成本方面考虑也没有必要这么大费周章。
该方案的框图模块如图1.2.2所示 方案二采用DS18B20新型数字温度传感器。
美国Dallas半导体公司的数字化温度传感器DS1820是世界上第一片支持 quot一线总线quot接口的温度传感器在其内部使用了在板ON-B0ARD专利技术。
全部传感元件及转换电路集成在形如一只三极管的集成电路内。
一线总线独特而且经济的特点使用户可轻松地组建传感器网络为测量系统的构建引入全新概念。
现在新一代的DS18B20体积更小、更经济、更灵活。
使你可以充分发挥“一线总线”的优点。
备注由于实验器材的限制使我无法更改硬件电路因此我只能在一条总线上挂一个传感器 该方案的框图模块如图1.2.3所示 3显示模块 显示系统是单片机控制系统的重要组成部分主要用于显示各种参数的值以便使现场工作人员能够及时掌握生产过程。
工业控制系统中常用的显示器件有CRT、LED、LCD等。
CRT不仅可以进行字符显示而且可以进行画面显示和计算机配合使用可十分方便地实现生产过程的管理和监视。
但由于CRT体积大价格昂贵所以只适用于大型微机控制系统。
在中小型的控制过程中为了使工作人员能够在现场直接看到生产情况和报警信号经常选用LED和传感器电流源 传感器及差分放大 单片机 低通滤波器 低通滤波器 模数转换器 图1.2.2 STC89C58 DS18B20 图1.2.3 3 LCD作为显示器件。
LED和LCD都具有体积小功耗低响应速度快易于匹配可靠性高和寿命高等优点但LED显示内容简单只能显示符号和数字不能显示中文。
LCD是一种功耗极低的显示元件在仪表和低功耗应用系统中的使用较多它不但能显示字符而且还可以显示中文甚至是图片。
方案一采用LCD1602作为显示设备但由于LCD1602只能显示字符而不能显示中文。
方案二采用LCD12864作为显示设备它可以显示中文而且它的屏幕大因此显示内容多是理想的显示设备。
1.2.2 系统各模块的最终方案 经过仔细分析和论证决定了系统各模块的最终方案如下 1 控制模块STC89C58 2 温度采集模块DS18B20 3 显示模块LCD12864 系统的基本框图如图1.2.4所示 2.系统的硬件设计与实现 2.1 系统的硬件基本组成部分 本题设计的是一个多功能时钟系统附加了温度功能因此为了硬件部分简单采用了数字温度传感器利用DS1302作为时钟源和中文液晶屏作为显示设备由于大部分功能都是由单片机来实现的因此硬件电路得到了简化具体电路图请见附录. 2.2主要单元电路的设计 2.2.1 温度传感器部分电路 DS18B20采用单总线与单片机通信其中在数据线上必须加一个10K上拉电阻DS1302采用SPI总线技术与单片机通信其中VCC1接3V备用电池VCC2接主电源LCD12864采用并行接口并行接口主要优点是传输速度快编程方便.由于按键数量少直接采用独立按键就可以了. 2.2.2显示部分 显示部分我们这里采用了中文液晶屏它的好处就是显示内容多可以直接调用里面字库显示汉字为此减少了
代码占用的存储空间可是这个中文液晶屏我还STC89C58 DS18B20 LCD12864 图1.2.4 键盘 蜂鸣器 4 是不太会用还有我这次作品主要是以Protues仿真为主的所以我对Protues里面带的那个点阵12864使用的非常熟悉.具体电路见附录 3系统程序设计 3.1系统的软件设计 硬件简单那么软件就相对复杂多了由于篇幅限制详细设计请参见附录4 3.2 温度转换设计 由于传感器传送了两个字节的温度是以补码形式存储的默认传感器精度为12位表2所示的是12位转化后得到的12位数据存储在DS18B20的两个8比特的RAM中二进制中的前面5位是符号位如果测得的温度大于0这5位为0只要将测到的数值乘于0.0625即可得到实际温度如果温度小于0这5位为1测到的数值需要取反加1再乘于0.0625即可得到实际温度。
例如125℃的数字输出为07D0H25.0625℃的数字输出为0191H-25.0625℃的数字输出为FF6FH-55℃的出为FC90H。
表2部分温度转换表 3.3 时间读取与转换程序设计 SPI总线传输数据原理比较简单而且这时钟芯片控制也很简单只要我们往指定地址写上数据或读数据就可以修改时间和读取时间需要注意的是在更改时间的时候一定要把写保护打开. 5 3.4 系统主程序流程图 开始 蜂鸣器初始化 时钟芯片初始化 DS18B20初始化 LCD12864初始化 T0T1初始化 MODE键是否按下 显示时间日期星期 设置菜单 判断闹钟开关 闹钟是否到了 调整时间 秒表功能 设置闹铃 MODE键是否按下 闹铃报警开启 否 是 否 是 是 否 读取闹钟字体等参数 6 4.系统测试 4.1 测试仪器 1.万用表MF-47A 2.Nokia AC-8C电源适配器 3.标准数字温度计 4.STC单片机编程器 4.2 指标测试 根据实际测量温度的误差只有±0.1℃可能我所用的参照物也有些误差 时间一天大约有1s的误差可能原因是DS1302的晶振导致的 闹钟能在指定的时间里响并可以在响的时候随时按停而且还不影响下一次闹钟的状态 秒表精确度高采用中断计时与中断开启与暂停因此有效减少因为按键去抖延时而引起的误差 4.2.1按键的测试 各按键按下后单片机等能给予相应并完成相应的功能并且也没有出现按键过操作的情况 4.2.2温度采集的测试 分别给温度传感器加不同的温度传感器都能很快的响应在现有的条件下已经测到一百多度和零下5度 4.2.3系统实现的功能 能显示当前时间以及年、月、日、星期、温度具备闹铃功能和秒表功能断电后再上电依然能保存设置的闹钟字体等等. 4.3 结论 经过两个星期漫长时间的努力终于完全把设计出来了此时的心里有一种说不出来的喜悦可是从喜悦中醒来的我发现我做的远远还不够编程结构化不好移植性也不好我先在仿真软件做出仿真作品后来买回来实物把实物做出来由于液晶屏完全不兼容所以要修改液晶屏的驱动程序上网搜索N个参考程序发现看不懂郁闷到现在我还几乎不怎么会使用中文液晶屏只会用它显示个汉字绘个1616的汉字函数有了这个驱动我就可以把中文屏当点阵屏使用了这个驱动是我花了十个小时加上100次调试才研究出来的通过这次研究我终于了解了LCD12864液晶屏的有关坐标概念这个坐标概念很重要哦网上有很多大虾发表自己的见解说实话我就是一点看不懂才愿意自己花时间研究的并且第一时间发表到我的51单片机群里面虽然有缺点但我的程序还是有几个亮点让我感到自豪的是第一:我的闹钟程序同样还是参考了个闹钟设计程序发现他们关闭闹钟都是直接关闭闹钟总开关这就意味着下次闹钟必须手动打开这多麻烦啊而我的不存在这种情况还有在这里严重声明我的程序版权归我所有任何人不得无偿发表我的程序第二:MODE按键采用了中断技术这样在平时的时候就不必都来查询下键盘提高了程序执行效率还有秒表的开 7 始与暂停也采用中断技术这样做的好处是提高了计时的准确性而要是采用延时判断键盘而引起的误差的后果可想而知第三:由于我发现这个单片机平时工作时CPU占有率特别高可能是由于不断和温度转换器通信而导致的有考虑到了这个温度这东西没有必要实时刷新那就改为每10s刷新一次吧于是CPU占有率一下子下降了30. 8 5总结 通过本次比赛首先觉得自己确实学了不少东西而且还是第一次做出属于自己的板子看上去感觉还不错其实这次最大的感受是仿真和实物就是有差距仿真能行实物不一定行但仿真不能行实物就不一定不行这次的竞赛不但锻炼了我的动手能力而且还激发了我的创新思维培养了我勇于面对困难克服困难的坚强意志和不懈的精神更重要的是使我深深的体会到理论结合实际的重要性体会到知识的海洋是无穷无尽激发我们去追求。
总之我喜欢quot电子设计quot竞赛感谢学院给了我锻炼的机会。
参考文献 1. 杨欣等.51单片机应用实例详解.北京:清华大学出版社2010年 2. 江力.单片机应用技术.北京:清华大学出版社2006年 3. 李静.快速学通51单片机C语言程序设计2010年 4. 郭志勇.单片机应用技术项目教程C语言版2011年 5. 黄志伟.印制电路板PCB设计技术与实践2010年 附录1元器件清单 元器件 型号 数量 元器件 型号 数量 单片机 STC89C58RD 1 IC底座 黑色 2 时钟芯片 DS1302 1 10K排阻 1 温度传感器 DS18B20 1 5V无源蜂鸣器 1 瓷片电容1 20pF 2 可调电阻 20K 1 瓷片电容2 30pF 2 USB接口 公头 1 石英晶振1 32.768KHz1 1 LED指示灯 绿色 1 石英晶振2 12MHz1 1 电阻 10K 5 纽扣电池 CR2032 1 电阻 1K 2 LCD12864 HJ12864-M1 1 PNP三极管 8550 1 排针、排母 对数 1 按钮开关 5 电容 330uF 1 电容 100uF 1 9 附录2系统电路图 12J1POWERP1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78RST9P3.0/RXD10P3.1/TXD11P3.2/INIT012P3.3/INIT113P3.4/T014P3.5/T115P3.6/WR16P3.7/RD17X218X119GND20P2.021P2.122P2.223P2.324P2.425P2.526P2.627P2.728PSEN29ALE30EA31P0.732P0.633P0.534P0.435P0.336P0.237P0.138P0.039VCC40U1STC89C58RD-DIP40VCCVCC12Y112MHzC1330uFC130pFBELLBT13VS1MODER120kVSS1VDD2V03RS4E6DB07DB18DB29DB310DB411DB512DB613DB714PSB15NC16RST17VOUT18BLA19BLK20R/W5U2LCD12864VCCS1C230pFVCCV0V0RSRSR/WR/WENENVCCRSTRSTBLAGNDBLAVCCQ18550VCCGND1DQ2VCC3DS18B20U4DS18B20VCCP1.0P1.0R610KVCCVCC21X12X23GND4CE5I/O6SCLK7VCC18R7DS1302VCC1X1X2X1X2S2SELECTS3DOWNS4UPR81K123456781109RP110KP0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7VCCP3.2P1.1P3.3P1.3P3.2P3.3P1.1P1.3R510KR410KR310KR210KVCCP1.1P1.3P3.2P3.3VCCVCC112Y232.768KHzC320pFC420pF 10 附录3部分程序清单 /DS1302时钟芯片/ 由于源程序有两千多行我又打印不起所以在这里就给写函数申明具体的源程序我会毫无保留发到指定邮箱里. uchar times7//用于存放从DS1302中读出的数据秒 分 时 日 月 星期 年 uchar disptimes14 //DS1302经处理后的的真正数值 sbit RST_1302P35 //复位引脚位定义 sbit SCLK_1302P36 //串行时钟引脚位定义 sbit IO_1302P37 //数据引脚位定义 void write_1302_byteuchar byte //往DS1302里写一个字节 uchar read_1302_byte //从DS1302里读出一个字节 void write_1302uchar addruchar dat//指定地址写数据 uchar read_1302uchar addr//指定地址读数据 void gettime_1302uchar times // 功能描述: 处理读出时间把十位和个位分开来 void worktime_1302uchar disptimesuchar times//DS1302的数据处理把从DS1302读出的简易BCD码转换成正常的字符码 void init_1302 //注意在使用1302之前必须先初始化 /LCD12864点阵液晶屏/ void check_busyvoid//检测忙信号 void write_commanduchar command//写指令 void write_datuchar dat//写数据 void Initvoid //初始化 void Clrvoid //清屏为什么这里我给出了清屏函数呢是因为我发现我们学校里有一本书上的清屏函数写的根本就是错的在此我给出相对正确程序不用谢 uchar ij CS10CS20 //选中全屏 write_command0xb8//从第一页开始写 fori0ilt8i //上面两句联合起来说就是在液晶屏的左上角开始写数据 write_command0x40//从第一列开始写必须加否则就会出现清屏不干净情况 write_command0xb8i //共8页每页都由64列组成 forj0jlt64j//有很多人都喜欢写成128我就是很不明白这是为 11 什么不多此.
上一篇:
扫描线填充算法
下一篇:
数字图像的可逆数字水印研究