2022年自动打铃控制器 .pdf
《2022年自动打铃控制器 .pdf》由会员分享,可在线阅读,更多相关《2022年自动打铃控制器 .pdf(30页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、课程设计2011 年 3 月 18 日目录课程单片机原理及应用课程设计题目自动打铃控制器院系电子科学学院专业班级学生姓名学生学号指导教师名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 30 页 - - - - - - - - - 1 1 引言 .2 2 设计要求 .3 2.1 总体设计思想. 3 3. 硬件电路设计思想 . .3 3.1PCB图. 54. 程序流程图 .5 5. 程序清单 .6 6 元器件明细表. 26 7. 调试过程 . 27 8. 参考文献 . 27
2、名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 30 页 - - - - - - - - - 2 1 引言单片机又称单片微控制器, 它不是完成某一个逻辑功能的芯片, 而是把一个计算机系统集成到一个芯片上。相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O 设备。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。单片机内部也用和电脑功能类似的模块,比如CPU ,内
3、存,并行总线,还有和硬盘作用相同的存储器件,不同的是它的这些部件性能都相对我们的家用电脑弱很多,不过价钱也是低的,一般不超过10 元即可用它来做一些控制电器一类不是很复杂的工作足矣了。我们现在用的全自动滚筒洗衣机、排烟罩、 VCD等等的家电里面都可以看到它的身影!它主要是作为控制部分的核心部件。可以说,二十世纪跨越了三个“电”的时代,即电气时代、电子时代和现已进入的电脑时代。不过,这种电脑,通常是指个人计算机,简称PC机。它由主机、键盘、显示器等组成。还有一类计算机,大多数人却不怎么熟悉。这种计算机就是把智能赋予各种机械的单片机(亦称微控制器)。顾名思义,这种计算机的最小系统只用了一片集成电路
4、,即可进行简单运算和控制。因为它体积小,通常都藏在被控机械的“肚子”里。它在整个装置中,起着有如人类头脑的作用,它出了毛病,整个装置就瘫痪了。现在,这种单片机的使用领域已十分广泛,如产品未使用单片机或其它可编程逻辑器件上智能控制、实时工控、通讯设备、导航系统、家用电器等。各种产品一旦用上了单片 机 , 就 能 起 到 使 产 品 升 级 换 代 的 功 效 , 常 在 产 品 名 称 前 冠 以 形 容 词“智能型”,如智能型洗衣机等。今天我利用单片机控制学校的打铃系统,下面是我的设计思路名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - -
5、- - 名师精心整理 - - - - - - - 第 3 页,共 30 页 - - - - - - - - - 3 2 设计要求用单片机、数字温度传感器、实时时钟芯片、点阵液晶模块设计一个简易的自动打铃系统,系统工作时,在 LCD显示器的第一行用1616 点阵的汉字显示“自动打铃系统”,第二行显示当前时间, 第三行显示当前温度值, 在随后的四行显示一页最近的打铃时间,即将要打铃的时间用黑底白字显示,如果该页的最后一个时间打过铃后,自动翻页,将下一页的4 个打铃时间显示出来;用户可以通过按键修改当前时间或打铃时间; 用户可以通过按指定键获知各键的功能。2.1 总体设计思想用 TG12864B 液
6、晶模拟块设计一个简易的自动打铃系统,系统正常工作是, 在LCD显示器的第一行用 16*16 的点阵的汉字显示“自动打铃系统” ,第二行显示当前时间,第三行显示当前温度,在随后的四行显示一页的最近的打铃时间,即将要打铃的时间用黑底白字显示,如果该页的最后一个时间打过铃后,自动翻页,将下一个的 4 个打铃时间显示出来; 用户可以通过按键修改当前时间或打铃时间。利用 KDOWN键进入 HELP 功能;打铃时用音乐声代替。3. 硬件电路设计思想分析:自动打铃系统的本质就是电子钟,如果当前的时间与打铃时间相同,就控制蜂鸣器发出打铃声。虽然利用单片机本身的定时器也能够实现走时功能,但精度不够高,程序也比较
7、复杂,而实时时钟芯片PCF8563能够轻松的解决以上问题。由于打铃时间可能多达数十个,如果用户设置完打铃时间后将其保存在片内RAM 中, 一旦断电或重新启动, 打铃时间又必须重新设置, 为此可利用串行 E2PROM器件 24C02来保存打铃时间。另外用 4 个按键来设置当前时间和打铃时间。系统正常工作时,按KDOWN键进入帮助菜单;按KSET 键进入当前时间的设置,长按KSET键则进入打铃时间的名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 30 页 - - - - -
8、- - - - 4 设置;进入设置方式后, 按 KSET键移动光标,用黑底白字指示当前正在修改的时、分、秒,KINC ,KDEC 键分别对当前的修改对象加、减1,如果是修改的打铃时间,用 KDOWN键对下一个打铃时间进行设置, 长按 KSET 键退出当前时间或打铃时间的设置方式,回到正常状态。电子钟是一个以“分”,“秒”显示于人的视觉器官的计时装置。它的计时周期为24小时,显示满刻度为23 时 59 分 59 秒,另外应有校时功能和一些显示星期、报时、停电查看时间等附加功能。因此,一个基本的数字钟电路主要由译码显示器、“时”,“分”,“秒”,“星期”计数器、校时电路、报时电路和振荡器组成。干电
9、路系统由秒信号发生器、“时、分、秒、星期”计数器、译码器及显示器、校时电路、整点报时电路组成。秒信号产生器是整个系统的时基信号,它直接决定计时系统的精度,一般用石英晶体振荡器加分频器来实现。 将标准秒信号送入“秒计数器”, “秒计数器”采用60 进制计数器,每累计 60 秒发出一个“分脉冲”信号, 该信号将作为“分计数器”的时钟脉冲。“分计数器”也采用60 进制计数器,每累计60 分钟,发出一个“时脉冲”信号,该信号将被送到“时计数器”。“时计数器”采用24 进制计时器, 可实现对一天 24小时的累计。每累计24 小时,发出一个“星期脉冲”信号,该信号将被送到“星期计数器”,“星期计数器”采用
10、 7 进制计时器,可实现对一周7天的累计。译码显示电路将“时”、“分”、“秒”、“星期”计数器的输出状态送到七段显示译码器译码,通过七位LED七段显示器显示出来。整点报时电路时根据计时系统的输出状态产生一脉冲信号,然后去触发一音频发生器实现报时。校时电路时用来对“时”、 “分”、“秒”、“星期”显示数字进行校对调整的。晶振用一种能把电能和机械能相互转化的晶体在共振的状态下工作,以提供稳定,精确的单频振荡。在通常工作条件下,普通的晶振频率绝对精度可达百万分之五十。高级的精度更高。 有些晶振还可以由外加电压在一定范围内调整频率,称为压控振荡器( VCO )晶体振荡器电路给数字钟提供一个频率稳定准确
11、的32768Hz 的方波信号, 此外还有一校正电容可以对温度进行补偿,以提高频率准确度和稳定度,使稳定度优于10-4,可保证数字钟的走时准确及稳定,下面我画出硬件电路图,见附录1。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 30 页 - - - - - - - - - 5 3.1PCB图见附录 2。4. 程序流程图5. 程序清单文件 I2C.C 的清单如下:#include #include Y N N Y PCF8563 产生中断?N Y N N 初始化定时器 T0
12、 初始化外部中断 0 初始化液晶屏显 示 ” 自 动 打 铃系统”显示当前时间显示当前温度开始将打铃时间从24C02中至数组 alatime 中初始化 PCF8563 允许定是、报警中断写入当前时间显示当前温度显示 1 页最近打铃时间确定下一个要打铃的时间将其设为 PCF8563 的报警时间将其以黑底白字方式显示KSET_LONG键按下修改当前时间写入 PCF8563 KSET 键按下KDOWN键按下修 改 打 铃 时间写入 24C02 显示 HELP 功能24C02中的打铃时间有效?从 PCF8563读取当前时间,显示当前时间音乐声是否结束?发 DS18B20复位命令发跳过 ROM 命令发启
13、动温度转换命发 DS18B20复位命令发跳过 ROM 命令发读暂存器指令读取 2 字节的温度将温度值转换为BCD码送显示缓存、调用显示程序控制定时器T0 产生方波将正在打铃时间以正常方式显示指向下一个打铃时间将其设为PCF8563 的打铃时间将其以黑底白字方式显示翻页KDOWN键按下KINC键按下Y 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 30 页 - - - - - - - - - 6 #define uchar unsigned char #define de
14、lay1us() _nop_() #define delay5us() _nop_();_nop_();_nop_();_nop_();_nop_() sbit SDA=P17; /P1.1模拟 I2C 总线的 SDA sbit SCL=P16; /P1.0模拟 I2C 总线的 SCL bit ack_mk; /应答标志位,有应答为1,无应答为 0 void Start() / 始信号 / 产生起 SDA=1; / 将 SDA 、SCL置为 1 SCL=1; delay5us(); /起始条件建立时间大于4.7us, 故延时 5us SDA=0; /SCL 为高时, SDA由高变低,发送起始信
15、号 delay5us(); /延时 5us SCL=0; /SCL 变低,准备发送或接收数据 void Stop() /产生停止信号 SDA=0; / 将 SDA清 0, SCL置 1 SCL=1; delay5us(); /结束条件建立时间大于4.7us ,所以延时 5us SDA=1; / 当 SCL为高电平时, SDA由低变高,产生结束信号 delay5us(); /延时 5us SCL=0; void Ack(void) /产生应答信号 SDA=0; /SDA先清 0,发应答信号 SCL=1; /SCL 由低变高,产生一个时钟 delay5us(); /延时 5us SCL=0; /时
16、钟线 SCL恢复到低电平,以便继续接收 void NAck(void) / 产生非应答信号 SDA=1; /SDA先置 1,发非应答信号 SCL=1; /SCL由低变高,产生一个时钟 delay5us(); / 延时 5us SCL=0; /时钟线 SCL清恢复到低电平,以便继续接收 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 30 页 - - - - - - - - - 7 void SendByte(uchar c) /向 I2C 总线发送一个字节 uchar n
17、 ; for(n=0;n8;n+) / 一字节为 8 位,循环 8 次 if(c&0 x80) SDA=1; / 根据发送位将数据线SDA置为 1 或清 0 else SDA=0; SCL=1; /置 SCL为高,通知被控从机开始接收数据位 delay5us(); /延时 5us SCL=0; /SCL变低电平,准备发送下一位数据 c=c1; /将下一位要发送的数据移到最高位, 先高后低 delay5us(); /延时 5us SDA=1; /一字节发送完后释放数据线,准备接收应答位 delay5us(); SCL=1; /SCL由低变高,产生一个时钟,读取SDA的状态 delay5us();
18、 /延时 5us if (SDA=1) ack_mk=0; / 如果 SDA=1 ,则发送失败,将ack_mk清 0 else ack_mk=1; /否则发送成功,将ack_mk置 1 SCL=0; /SCL 变低 uchar RcvByte() / 接收一个字节 uchar c; uchar n; for(n=0;n8;n+) / 一字节为 8 位,循环 8次 SDA=1; /置数据线 SDA为输入方式 , 进入接收方式 SCL=1; /SCL由低变高,产生一个时钟 if (SDA=0) / 根据数据线 SDA的状态,将 c 的最高位清 0 或置 1 c=c&0 x7f; else c=c|
19、0 x80; c= _crol_(c,1); /将 c 循环左移一位,先接收高位, 后接收低位 SCL=0; /时钟线 SCL清 0 return(c); /* 从指定器的的子地址开始写入多个字节*/ bit ISendStr(uchar sla,uchar suba,uchar *s,uchar no) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 30 页 - - - - - - - - - 8 uchar i; Start(); /启动总线 SendByte(sl
20、a); /*发送器件地址 */ if(ack_mk=0)return(0); SendByte(suba); /*发送器件子地址 */ if(ack_mk=0)return(0); for(i=0;ino;i+) SendByte(*s); /*发送数据 */ if(ack_mk=0)return(0); s+; Stop(); /*结束总线 */ return(1); /* 从指定器的的子地址开始读取多个字节*/ bit IRcvStr(uchar sla,uchar suba,uchar *s,uchar no) uchar i; Start(); /*启动总线 */ SendByte(s
21、la); /*发送器件地址 */ if(ack_mk=0)return(0); SendByte(suba); /*发送器件子地址 */ if(ack_mk=0)return(0); Start(); SendByte(sla+1); if(ack_mk=0)return(0); for(i=0;ino-1;i+) *s=RcvByte(); /*发送数据 */ Ack(); /*发送就答位 */ s+; *s=RcvByte(); NAck(); /*发送非应位 */ Stop(); /*结束总线 */ return(1); 名师资料总结 - - -精品资料欢迎下载 - - - - - -
22、- - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 30 页 - - - - - - - - - 9 文件 LCD12864IO.C的清单如下:#include #include #include #define uchar unsigned char #define uint unsigned int sbit LCD_RST= P37; / 液晶屏复位脚定义sbit DI=P34; /DI引脚定义sbit RW=P35; /RW引脚定义sbit CS=P33; / 片选信号定义sbit EN=P36; / 使能信号定义sbit RDY=
23、P07; / 对应状态信息中的BF位sfr LCD=0 x80; /P0 口作为数据口#define LCD_DISPON 0 x3f / 打开 LCD显示#define LCD_STARTROW 0 xc0 / 设置起始行,可用LCD_STARTROW+x设置起始行 (x64) #define LCD_ADDRSTRY 0 xb8 / 页起始地址,可用 LCD_ADDRSTRX+x设置当前页 (x8) #define LCD_ADDRSTRX 0 x40 / 列起始地址,可用LCD_ADDRSTRY+x设置当前列 (x64) #define CS1 0 /左半屏选择#define CS2 1
24、 /右半屏选择/ 命令字 cmd送左半屏( port=0 )/ 右半屏( port=1 )命令口void LCD_WrCmd(bit port,uchar cmd) EN=0; CS=port; DI=0; / 选择命令寄存器 RW=0; EN=1; LCD=cmd; / 命令码送总线 EN=0; / 数据 wrdata 送左半屏( port=0 )/ 右半屏( port=1 )数据口void LCD_WrDat(bit port ,uchar wrdata) EN=0; CS=port; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - -
25、 - - 名师精心整理 - - - - - - - 第 10 页,共 30 页 - - - - - - - - - 10 DI=1; / 选择命令寄存器 RW=0; EN=1; LCD=wrdata; / 命令码送总线 EN=0; / 以 filldata充填液晶屏void LCD_DispFill(uchar filldata) uchar x, y; LCD_WrCmd(CS1,LCD_STARTROW); / 设置左半屏显示起始行为0 LCD_WrCmd(CS2,LCD_STARTROW); / 设置右半屏显示起始行为0 for(y=0; y8; y+) /循环充填 8 页 LCD_Wr
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年自动打铃控制器 2022 自动 打铃 控制器
限制150内