基于单片机的远程电话控制系统内容摘要:

Software 公司出品的 51 系列兼容单片机 C 语言软件开发系统,使用接近于传统 c 语言的语法来开发,与汇编相比, C 语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用 ,而且大大的提高了工作效率和项目开发周期 ,他还能嵌入汇编,您可以在关键的位置嵌入,使程序达到接近于汇编的工作效率。 KEILC51 标准 C 编译器为 8051 微控制器的软件开发提供了 C语言环境 ,同时保留了汇编代码高效 ,快速的特点。 C51 编译器的功能不断增强, 使你可以更加贴近 CPU 本身,及其它的衍生产品。 C51已被完全集成 到 uVision 的集成开发环境中,这个集成开发环境包含:编译器,汇编器,实时操作系统,项目管理器,调试器。 uVision IDE 可为它们提供单一而灵活的开发环境。 单片机程序上包括一些函数变量申明等,主程序及一些子函数。 具体程序说明如下: 程序说明 /***************************************** * 实验名 : 远程电话控制系统 * 使用的 IO : 、 、 、 ; 语音芯片播放及下一语音 段, 出。 * 实验效果 : 1,来点响铃超过 6次(任意设)进入系统 : 2,密码输入次数超过 3次(任意设)挂机 : 3,密码正确后提示用户各项操作所对应的数字键,确认操作完成后,挂机 : 4,按键时间间隔不能超过 5秒(可设 510 秒)当超过设定值,挂机 语音字段说明 : 1,欢迎进入远程电话控制系统 : 2,请输入密码 : 3,请重新输入 : 4,密码错误,再见 : 5,谢谢使用,再见 : 6,控制电饭煲请按 1 : 7,控制热水器请按 2 *************************************************************/ 函数申明及变量定义 include void UsartConfiguration()。 void Delay300ms()。 //延时 200ms void Init()。 //初始化函数 void Select_PLAY(unsigned char x)。 //定义选择播放子函数 void password_if()。 //密码判断子程序 void TimerConfiguration()。 //定时器配置函数 sbit PLAY=P2^0。 //播放控制 sbit NEXT=P2^1。 //播放下一个 sbit CTRL1=P2^2。 //控制输出第一路 sbit CTRL2=P2^3。 //控制输出第二路 unsigned char RX_BUF[30]。 //接收缓冲区 unsigned char TX_BUF[20]。 //发送缓冲区 unsigned char RX_count=0。 //接收字符计数变量 unsigned char Ring_Count。 //响铃计数变量 unsigned char Ring_Count_set。 //响铃计数变量设置值 unsigned char Password_count。 //密码输入次数 unsigned char Password_count_set。 //密码输入次数 设置值 unsigned char Password1。 //初始密码第一位 unsigned char Password2。 //初始密码第二位 unsigned char Password3。 //初始密码第三位 unsigned char Password4。 //初始密码第四位 unsigned char buf_Password1。 //接收密码第一位 unsigned char buf_Password2。 //接收密码第二位 unsigned char buf_Password3。 //接收密码第三位 unsigned char buf_Password4。 //接收密码第四位 unsigned char buf_password_count。 //接收密码计数 unsigned char order1。 //命令 1 unsigned char order2。 //命令 2 unsigned char order3。 //命令 3 unsigned char order4。 //命令 4 unsigned char delay_time_set。 //按键延时时间设定值 unsigned char delay_time_bit。 //按键延时时间标志 unsigned char Time。 //记时变量 初始化函数 初始化函数将一些变量付给了初值,系统初始密码为 1234。 详细请见如下程序: /******************************************************************************* * 函数名 : Init() * 函数功能 : 初始化函数 * 输入 : 无 * 输出 : 无 *******************************************************************************/ void Init() { RX_count=0。 //接收字符计数变量清零 Ring_Count=0。 //响铃计数变量 Ring_Count_set=6。 //响铃计数变量设置值初始值为 6次 Password_count=0。 //密码输入次数,初始值为 0 Password_count_set=3。 //密码输入次数设置值,初始值为 3 Password1=1。 //初始密码设为 1234 Password2=2。 //初始密码设为 1234 Password3=3。 //初始密码设为 1234 Password4=4。 //初始密码设为 1234 buf_password_count=0。 //接收密码计数,初值为 0 order1=0。 //命令标志初值为 0 order2=0。 //命令标志初 值为 0 order3=0。 //命令标志初值为 0 order4=0。 //命令标志初值为 0 PLAY=1。 //播放声音禁止 NEXT=1。 //选择播放声音指针默认不选择 CTRL1=1。 //控制输出第一路默认不输出 CTRL2=1。 //控制输出第二路默认不输出 delay_time_set=15。 //按键间隔延时时间设定 15秒 delay_time_bit=0。 //按键间隔延时时间标志 Time=0。 } 密码校验函数 密码校验函数的功能主要是当接通了电话后,在用户输入密码后进行判断,根据密码的正确与否来执行不同的程序。 /******************************************************************************* * 函数名 : password_if() * 函数功能 : 密码判断函数 * 输入 : 无 * 输出 : 无 *******************************************************************************/ void password_if() { buf_password_count=buf_password_count+1。 //密码接收计数加一 if (buf_password_count==1) //处理接收到的第一位密码数据 { if (RX_BUF[RX_count2]==0x31) //如果接收到的命令字符为 1 { buf_Password1=1。 } else if (RX_BUF[RX_count2]==0x32) //如果接收到的命令字符为 2 { buf_Password1=2。 } else if (RX_BUF[RX_count2]==0x33) //如果接收到的命令字符为 3 { buf_Password1=3。 } else if (RX_BUF[RX_count2]==0x34) //如果接收到的命令字符为 4 { buf_Password1=4。 } else if (RX_BUF[RX_count2]==0x35) //如果接收到的命令字符为 5 { buf_Password1=5。 } else if (RX_BUF[RX_count2]==0x36) //如果接收到的命令字符为 6 { buf_Password1=6。 } else if (RX_BUF[RX_count2]==0x37) //如果接收到的命令字符为 7 { buf_Password1=7。 } else if (RX_BUF[RX_count2]==0x38) //如果接收到的命令字符为 8 { buf_Password1=8。 } else if (RX_BUF[RX_count2]==0x39) //如果接收到的命令字符为 9 { buf_Password1=9。 } else if (RX_BUF[RX_count2]==0x30) //如果接收到的命令字符为 0 { buf_Password1=0。 } } else if (buf_password_count==2) //处理接收到的第二位密码数据 { if (RX_BUF[RX_count2]==0x31) //如果接收到的命令字符为 1 { buf_Password2=1。 } else if (RX_BUF[RX_count2]==0x32) //如果接收到的命令字符为 2 { buf_Password2=2。 } else if (RX_BUF[RX_count2]==0x33) //如果接收到的命令字符为 3 { buf_Password2=3。 } else if (RX_BUF[RX_count2]==0x34) //如果接收到的命令字符为 4 { buf_Password2=4。 } else if (RX_BUF[RX_count2]==0x35) //如果接收到的命令字符为 5 { buf_Password2=5。 } else if (RX_BUF[RX_count2]==0x36) //如果接收到的命令字符为 6 { buf_Password2=6。 } else if (RX_BUF[RX_count2]==0x37) //如果接收到的命令字符为 7 { buf_Password2=7。 } else if (RX_BUF[RX_count2]==0x38) //如果接收到的命令字符为 8 { buf_Password2=8。 } else if (RX_BUF[RX_count2]==0x39) //如果接收到的命令字符为 9 { buf_Pa。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。