目 录
一、绪论 1
(一)课题的研究意义 1
(二)设计任务及要求 1
(三)单片机的发展史 2
(四)单片机的发展趋势 3
二、系统的整体结构 5
三、单片机介绍 6
1、单片机引脚介绍 9
2、复位电路设计 9
2.时钟电路设计 11
四、点阵电路介绍 12
(一) LED点阵显示部分简介 12
(二)LED驱动方式 14
(三)手写笔电路设计 16
五、软件设计 17
(一)系统软件流程图 17
(二)程序函数介绍 18
1、延时函数 18
2、行扫描函数 18
3、手写笔中断函数 18
(三)编程环境介绍 19
总结 23
参考文献 24
附录 A 25
(一) 硬件电路原理图 25
附录B 26
(二) 系统程序源代码 26
致谢 38
二、系统的整体结构
(一)控制芯片的确定
方案一:采用STC公司生产的STC125A60S2 8位单片机。该单片机具有成本低,性价比高的优点,且编程较方便,其外部具有32 个可编程I/O 口、内部含有3 个16 位定时器/计数器、可使用八个中断源、并且可进行全双工的串行通信。但是其内部模块较少、功能局限性大,并且内部没有集成模/数转换模块、脉冲宽度调制模块,如果需要使用AD模块和脉冲宽度调制模块的话不需加这些外围电路,内部有八路10位AD,两路PWM输出单片机的运行速度非常的快是普通51单片机的8-12倍。给系统的点阵刷新提供了有力的保证。
方案二:采用 飞思卡尔半导体公司生产的MK10DN512 系列32位单片机。该单片机内部具有128K 的RAM 和128K 的ROM、512K 可编程Flash 存储器、16 路精度为8bit/10bit/12bit 的AD转换模块、16路脉冲宽度调制(PWM)通道、8个定时器/计数器、2个全双工UART 串行通道、看门狗定时器、80 个可编程I/O 口、16个外部事件触发中断引脚、超过150个中断输入源。是一款性能十分强大的综合性单片机,并且内部自带PLL 模块,总线频率最高可以设置成256MHz,运算速度快并稳定。100 引脚的MK10DN512 芯片的质量仅为50g。不过其做工复杂,成本较高,因此性价比较低,一般应用在汽车,航天等高精度控制领域。
在本次设计中,流量计回传为脉冲型,因此不必采集模拟量,且控制方式为电平式,从成本的角度出发,STC125A60S2 单片机完全可以满足要求,因此本次设计中选择性价比更高的STC125A60S2 单片机。
(二)点阵驱动方案论证
方案一:串行显示
此种显示方式由主要由74HC138译码器单元、数据移位寄存器74HC595和列驱动器组成,这种控制方式是单片机的I/O口得到了缩减不影响接收控制器传输下来的大量数据,此方案为点阵显示屏系统中比较常用的,所用器件也比较常用,价格便宜。
方案二:并行显示
可以通过锁存器芯片来增强单片机的I/O口的驱动能力,将8位宽的数据同时输入到LED点阵列中,达到并行控制LED点阵的目的。方案中运用4片锁存器74HC373来组成双缓冲寄存器,来驱动LED点阵行线,用5片3-8译码器74HC138组合成5-32译码器对LED点阵的32列进行选取。这样就避免了各行数据显示不同步的问题。由于并行数据传输速度非常快,所以高速度的地址编码信息可以同步发出。但由于单片机的引脚资源有限无法实现
综上所述,本设计最终选择了第一个方案。
(三)光笔设计的方案选择
光笔设计的关键是选择合适的传感器件,只有具有很高的灵敏度和一定的响应时间的传感器才能完成系统的要求及功能。
方案一:采用核心部件为光敏电阻制成的光笔检测系统。光敏电阻是将光能转换为电能的一种传感器件,它是构成光电式传感器的主要部件。光敏电阻结构简单、使用方便、价格便宜,但经调试发现其响应时间长,不易检测。
方案二:采用光敏二极管,与光敏电阻相比有较好的高频特性,具有一定的可靠性,功耗低.相比于光敏电阻而言灵敏度较差,需要较高倍数的放大器才能实现精准识别的效果。
方案三:采用光敏三极管,其工作原理与光敏二极管相似。但光敏三极管除了具有光敏二极管能将光信号转换成电信号的功能外,还有对电信号放大的功能。所以其灵敏度更高,响应时间快。
基于以上分析,我们采用光敏三极管作为光笔的检测部件。
(四)系统整体方案确立
经过深思熟虑过后对单片机的选择以及点阵的扫描方式进行了论证最终确定了系统的基本结构,本设计中系统大致分为五部分:单片机控制单元、点阵驱动单元 (行驱动和列驱动)、点阵显示单元、手写笔单元和电源五个单元组成。如图2.1给出系统的整个系统结构图
//************************************ ************************************
#include "reg52.h"//单片机头文件
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
#define ulint unsigned long int
sbit DAT=P2^5; //模拟数据发送端口
sbit CLK=P2^6; //模拟时钟控制端口
sbit SUO=P2^7; //模拟锁存信号端口
sbit a=P2^0; //行数据扫描信号
sbit b=P2^1; //行数据扫描信号
sbit c=P2^2; //行数据扫描信号
sbit d=P2^3; //行数据扫描信号
sbit en=P2^4; //行数据扫描信号
sbit k1_led=P1^0; //K1按键和指示灯
sbit k2=P1^1; //
sbit k3=P1^2; //
sbit k4=P1^3;
sbit DAT=P1^5; //模拟数据发送端口
sbit CLK=P1^6; //模拟时钟控制端口
sbit SUO=P1^7; //模拟锁存信号端口
sbit a=P3^4; //行数据扫描信号
sbit b=P3^5; //行数据扫描信号
sbit c=P3^6; //行数据扫描信号
sbit d=P3^7; //行数据扫描信号
sbit en=P2^0; //行数据扫描信号
sbit k1_led=P1^0; //K1按键和指示灯
sbit k2=P1^1; //K2按键
sbit k3=P1^2; //K3按键
sbit k4=P1^3; //K4按键
//------------------------------
//-----------------------------------------------