自动控制升降旗装置课程设计报告(编辑修改稿)内容摘要:

ddress),功能为每一次写一字节到指定的存储器地址上,存储器读函数Read24c02(uchar address),功能为读出指定地址上的一个字节。 13 开 始开 启 总 线A C K 测 试写 入 数 据 或 读 出 数据关 闭 总 线结 束 图 13 外部 ROM 程序流程图 5 详细仪器清单 表格 1 仪器清单 仪器名称 数量 STC89C52 芯片 1 8255A 芯片 1 ULN2020L 1 步进电机 1 七段 LED 数码显示器 6 按键 16 14 6 总结与思考及致谢 本系统采用单片机 STC89C52 作为自动控制升降旗系统的检测和控制核心,采用由单片机控制的步进电机带动国旗升降,通过用按生键来实现对国旗升降的自动控制,最终与实践相结合的升降旗系统,实现单片机与人们活的密切应用。 做本设计,深刻的体会到,要把各功能模块搞懂才能达到各硬件的融合,达到硬件和软件的结合。 软件设计中,由于汇编的繁琐性,本系统采用 C 来编写程序,其实 C 是每一条语句可转化为汇编,汇编是更接近硬件的语言,写汇编可以对单片机的实际操作有更好的理解,故有时间可以尝试写“双语”。 感谢学校能给我们这次机会,让我们有一个发挥自己的平台 ,让我们把从课本学到的知识用到实际生活当中,从中得到锻炼。 在系统设计过程中,刘老师、方老师、谭老师、周老师等提出了许多宝贵的意见,在此深表感谢。 同时得到了在校老师和同学们的支持与帮助,在此表示感谢 ! 15 参考文献 [1] 朱定 华 ,戴汝平 .单片微机原理与应用 (M).北京 :清华大学出版社 . 2020 [2] 张鑫 . 单片机原理及应用 (M).电子工业出版社 .2020 [3] 彭秀华 . 单片机高级语言 c51Windows环境编程与应用 (M).电子工业出版社 2020 [4] 全国大学生电子设计竞赛组委会.全国大学生电子设计竞赛获奖作品选编 (M).北京:理工大学出版社. 2020年 [5] 彭为 . 单片机典型系统设计实例精讲 (M).电子工业出版社 . 2020 [6] 沈庆阳 . 8051单片机实践与应用 (M).清华大学出版社 . 2020 [7] 张立科.单片机典型模块设计实例导航 (M).北京:人民邮电出版社 . 2020 [8] 陈涛.单片机应用及 c51程序设计 (M).机械工业出版社. 2020 16 附录一:系统程序代码 include include include define uchar unsigned char define uint unsigned int uchar code FFW[8]={0x75,0x65,0x6d,0x4d,0x5d,0x1d,0x3d,0x35}。 //步进电机正转数组 uchar code REV[8]={0x35,0x3d,0x1d,0x5d,0x4d,0x6d,0x65,0x75}。 //步进电机反转数组 //setflag 用标志定位是否有效 test_x,test_y 用于定义 16 个按键中的任一个 uchar test_x=10,test_y=10,setflag=0。 uchar setfalse=0。 uint counter=0。 //用于定义每隔多少个脉冲数码管上数字自增 //定义四个变量分 别存储四个要显示的数位的值 four 显最高位第四位的值,依此类推 uint sum=0,four=0,three=0,two=0,one=0。 uint four_max=0,three_max=0,two_max=0,one_max=0。 //定义四个变量,用来定位停止 //音乐模块用到的些定义常量,变量,数组 unsigned char volatile FlagBeat。 //基本节拍单位计数变量 unsigned int volatile FreqTemp。 unsigned char volatile music_temp。 //暂时存放从 MusicTable 数组中读出的变量 unsigned char volatile beat。 unsigned char volatile freq。 //简谱码对应 T 值数组的下标 unsigned char volatile *pmusic。 sbit Pin_Buzzer=P3^3。 //串行外存定义的量 define WriteDeviceAddress 0xa0//定义器件在 IIC 总线中的地址 define ReadDviceAddress 0xa1 sbit SCL=P2^6。 sbit SDA=P2^7。 unsigned char x1,x2,x3。 unsigned int code FreqTab[]={ //简谱对应的简谱码、 T 值 65535,63628,63835,64021,64103,64260,64400,64524,64580,64684,64777,64820,64 17 898,64968,65030}。 unsigned char code MusicTable[]={//音符节拍码 0x52,0x84,0x02,0x82,0x82,0x01,0x81,0x52,0x61,0x71,0x84,0x84,0xa2,0x82,0x91,0xa1,0xc2,0x01,0xc1,0xc4,0xa2,0x01,0xa1,0x82,0x01,0xa1,0xc2,0x01,0xa1,0x94,0x94,0x04,0xd4,0xc4,0x94,0xa4,0xc2,0xa4,0xc2,0xa2,0x91,0xa1,0x82,0x01,0x91,0xa4,0xc2,0x01,0x61,0x82,0xa2,0x01,0xa1,0xc2,0x01,0xc1,0x92,0x92,0x92,0x62,0x01,0x61,0x94,0x02,0x52,0x84,0x02,0x82,0xa4,0x02,0xa2,0xc4,0x04,0xc4,0x04,0x82,0x01,0xa1,0xc2,0x01,0xc1,0xd4,0xc4,0xa2,0x01,0x81,0xc2,0xc2,0xc2,0xa2,0x82,0x54,0x84,0x32,0x01,0x81,0xc2,0xc2,0xc2,0xa2,0x82,0x54,0x84,0x54,0x84,0x54,0x84,0x84,}。 unsigned char const dis_table[16]={ 0xA0, /*0*/ 0xBB, /*1*/ 0x62, /*2*/ 0x2A, /*3 */ 0x39, /*4*/ 0x2C, /*5 */ 0x24, /*6*/ 0xBA, /*7*/ 0x20, /*8*/ 0x28, /*9 */}。 void DelayMs(unsigned int number) { unsigned char temp。 for(。 number!=0。 number) { for(temp=112。 temp!=0。 temp)。 }} //开始总线 void Start() {SDA=1。 SCL=1。 SDA=0。 SCL=0。 } //结束总线 void Stop() {SCL=0。 SDA=0。 SCL=1。 SDA=1。 } //发 ACK0 18 void NoAck() {SDA=1。 SCL=1。 SCL=0。 } //测试 ACK bit TestAck() {bit ErrorBit。 SDA=1。 SCL=1。 ErrorBit=SDA。 SCL=0。 return(ErrorBit)。 } //写入 8 个 bit 到 24c08 Write8Bit(unsigned int input) { unsigned char temp。 for(temp=8。 temp!=0。 temp) { SDA=(bit)(inputamp。 0x80)。 SCL=1。 SCL=0。 input=input1。 }} //写入一个字节到 24c08 中 void Write24c02(uint ch,uchar address) { Start()。 Write8Bit(WriteDeviceAddress)。 TestAck()。 Write8Bit(address)。 TestAck()。 Write8Bit(ch)。 TestAck()。 Stop()。 DelayMs(10)。 }。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。