电子信息工程专业毕业论文光电计数器设计(编辑修改稿)内容摘要:

入单片机 口,用于增加设定值;按键 S4接入单片机的 口,用于减小设定值。 溢出值的设定由这四个按键共同完成。 其 电路 原理图如图 7所示 : 图 7 键盘控制电路 主要芯片元器件引脚图及功能介绍 ( 1)运算放大器 LM393 的引脚图及功能介绍。 其引脚图如图 8 所示 : 图 8 LM393 引脚图 功能介绍: LM393 为双电压比较器, LM393 系列由两个偏移电压指标低达XXXX 学院 XXXX 届本科毕业设计 的独立精密电压比较器构成。 可以双电源供电,也可以单电源供电,且电压适用范围广;而且无论电源电压大小,电源消耗的电流都很低。 它还有一个特性是即便是单电源供电,比较器的共模输入电压范围接近地电平。 LM393 系列可以直接与 TTL 及 CMOS 电路逻辑电路接口。 无论是正电源还是负电源操作,当低电耗比标准比较器的优势明显时, LM393 系列便与 MOS 逻辑电路直接接口。 ( 2) AT89S52 单片机引 脚图及功能介绍。 其引脚图如图 9 所示 : 图 9 AT89S52 引脚图 功能介绍: AT89S52 是一种低功耗、高性能 CMOS8 位微控制器,具有 8K 在系统可编程 Flash 存储器。 与工业 80C51 产品指令和引脚完全兼容。 片上 Flash允许程序存储器在系统可编程,亦适于常规编程器。 在单芯片上,拥有灵巧的 8 位 CPU 和在系统可编程 Flash,使得 AT89S52 为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。 AT89S52 具有以下标准功能: 8k 字节 Flash, 256字节 RAM, 32 位 I/O 口 线,看门狗定时器, 2 个数据指针,三个 16 位定时器 /计数器,一个 6 向量 2 级中断结构,全双工串行口,片内晶振及时钟电路。 另外, AT89S52 可降至 0Hz 静态逻辑操作,支持 2 种软件可选择节电模式。 空闲模式下, CPU 停止工作,允许 RAM、定时器 /计数器、串口、中断继续工作。 掉电保护方式下, RAM 内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。 ( 3)四位一体共阴数码管引脚图及功能介绍。 其引脚图如图 10 所示 : XXXX 学院 XXXX 届本科毕业设计 图 10 四位一体共阴数码管引脚图 功能介绍: 每个 LED 显示器由 7 个发 光二极管组成,因此也称之为七段 ( A、B、 C、 D、 E、 F、 G) LED 显示器,此外,显示器中还有一个圆点型发光二极管(在图中以 DP 表示),用于显示小数点。 通过七个发光二极管亮暗的不同组合,可以显示多种数字、字母以及其它符号。 上图中 A、 B、 C、 D、 E、 F、 DP为 段引脚, 12 分别表 示四个数码管的位。 系统软件设计 软件需要完成的工作有:检测脉冲,对脉冲计数,显示计数结果,预设溢出初值,比较脉冲数与预设初值,产生溢出信号。 综上所述本系统的软件设计框图如图 11所示 : XXXX 学院 XXXX 届本科毕业设计 图 11 软件设计框图 系统 主 程序如下所示 : main(){ flag=0。 beer=1。 P0=0Xff。 //初始化 P0口 P2=0Xff。 Int_Init()。 Start_Count()。 是 否 产生溢出信号, 计数值清 0 开始 初始化单片机 预设溢出值 是否有脉冲信号 计数值 +1 计数值不变 是否超出溢值。 出值。 显示 否 是 XXXX 学院 XXXX 届本科毕业设计 while(1) { key_init()。 if(flag==1) { if((count/2)=alarm) { qian=count/2%10000/1000。 //显示千位 bai=count/2%1000/100。 //显示百位 shi=count/2%100/10。 //显示十位 ge=count/2%10。 //显示个位 } if((count/2)alarm)//大于设定值就报警 { count=0。 //重新计数 beer=0。 //报警 delay(1200)。 //报警时间 beer=1。 //关报警 } } display(qian,bai,shi,ge)。 //调用显示函数 } } 单元程序的设计 ( 1)中断程序 该设计采用外部中断 0 完成计数功能,外部中断请求为脉冲触发方式。 在这种方式下, CPU在两个相邻机器周期对中断请求引入端( 口)进行的采样中,如前一次为高电平,后一次为低电平,即为有效中断请求,计数值( count)加 1。 该设计使用光敏电阻作为检测元件,考虑到光敏电阻 受到脉冲光照射时,光电流要经过一段时间才能达到稳定值,光照突然消失时,光电流XXXX 学院 XXXX 届本科毕业设计 也不立刻为零,即产生的计数脉冲由高电平跳变到底电平有一定的延迟,而单片机是在两个相邻机器对外部输入信号进行采样的, 因此 在程序中调用延时程序,以提高信号采样的精确度。 void Int_Init(void) { IT0=1。 //下降沿触发 EA=1。 EX0=0。 } void Start_Count() { count=0。 EX0=1。 //开外部中断,用于计数,一个下降沿自增 1 } void Stop_Count() { EX0=0。 } void int0(void) interrupt 0 //INT0 { unsigned char val。 EX0=0。 delay_ms(20)。 val=sao。 if(val==0) if(flag==1) { count++。 delay_ms(50)。 XXXX 学院 XXXX 届本科毕业设计 } EX0=1。 } ( 2)按键设定程序 该 设计采用四个按键作为键盘来对溢出值进行设定,程序设计为只有在对溢出值设定后计数器才可以进行计数工作。 按键 1的作用是确定要进行溢出值设定的操作 , 按键 2 的作用是对设定的溢出值进行确定 , 按键 3的 作用是对设定值进行加 1的操作, 而按键 4 的作用是对设定值进行减 1的操作。 具体程序 如下所示: /*按键设定 */ void key_init() { if(key1==0) { delay(20)。 if(key1==0) { flag=0。 alarm=0。 qian=alarm%10000/1000。 //显示千位 bai=alarm%1000/100。 //显示百位 shi=alarm%100/10。 //显示十位 ge=alarm%10。 //显示个位 display(qian,bai,shi,ge)。 //调用显示函数 } } if(flag==0) { if(key2==0) flag=1。 XXXX 学院 XXXX 届本科毕业设计 if(key3==0) { delay(20)。 if(key3==0) { alarm++。 if(alarm==9999) alarm=0。 qian=alarm%10000/1000。 //显示千位 bai=alarm%1000/100。 //显示百位 shi=alarm%100/10。 //显示十位 ge=alarm%10。 //显示个位 display(qian,bai,shi,ge)。 //调用显示函数 } } if(key4==0) { delay(20)。 if(key4==0) { alarm。 if(alarm==0) alarm=9999。 qian=alarm%10000/1000。 //显示千位 bai=alarm%1000/100。 //显示百位 s。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。