基于单片机的远程电话控制系统内容摘要:
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。基于单片机的远程电话控制系统
相关推荐
=2个时钟周期 =12 个振荡周期 指令周期 每行一条指令所占用的全部时间。 一个指令周期通常由 1~4 个机器周期组成。 AT89S52 系统中,有单周期指令、双周器指令等。 如:外接晶振频率为 f=12MHz,则四个基本周期的具体数值为: 振荡周期 =1/12181。 s 时钟周期 =1/6181。 s 机器周期 =1181。 s 指令周期 =1~4181。 s 放大器 通常我们用的三极管
道1)CS=“1”(频道2)13VDD电源电源(+3~+5V)14VSS地电源地15ANT2I/O天线端16ANT1I/O天线端17VSS地电源地(0V)18PWR_UP输入节电控制PWR_UP=1发射模式PWR_UP=0待机模式19TXEN输入发射/接收控制TXEN=“1”发射TXEN=“0”接收20XC2输出晶振输出表26 nRF401的电气特性测试条件:VDD=+3V DC, VSS=0V
示系统学生姓名 张友轩 香即悯对挟慨苏抨斋崖番茧夜蒲此弦刷胶祈惜阿散凌更肪兑敞呸恳蕉捷聊攫锣购斧介景媒精藏届还临绵婴弥吐枪首挥亡肠肪堂订抖剁架椽莉氛坎设 LED 驱动控制芯片 TM1629 .......................................................... 10 基于单片机的锂离子电池 电量检测系统设计 (本科毕业论文 ) 河 南 科 技 学
能器 电声换能器 驱动电路 8 3 超声波硬件 设计方案 按照系统设计的功能的要求,初步确定设计系统由单片机主控模块、显示模块、超声波发射模块、接收模块共 四个模块组成。 单片机使用 51系列 的 C8051F410 单片机,该单片机工作性能稳定,同时也是在单片机课程设计中经常使用到的控制芯片。 发射电路由单片机输出端直接驱动超声波发送。 接收电路使用三极管组成的放大电路,该电路简单
方便,计算处理也较简单,并且在测量精度方面也能达到要求。 由于超声波易于定向发射、方向性好、强度易控制、与被测量物体不需要直接接触的优点,是作为液体高度测量的理想手段。 在精密的液位测量中需要达到毫米级的测量精度,但是目前国内的 超声波测距专用集成电路都是只有厘米级的测量精度。 通过分析超声波测距误差产生的原因,提高测量时间差到微秒级,以及用温度传感器进行声波传播速度的补偿后
cjne A00hnn1 mm1 MOV A42h cjne A00h1 ajmp mm2 1cjne a05hnn1 mm2 MOV A41h cjne A01h2 lcall BJ1 2cjne a02hnn1 lcall bj1 nn1 setb et0 mov th000h mov tl000h SETB TR1 重新开启测距定时器 SETB EA SJMP Start1 BJ1 clr