远程电话控制器(编辑修改稿)内容摘要:

1。 //指示灯 ,红色 sbit LED5=P3^0。 //指示灯 ,红色 /录音指示 sbit LED6=P1^7。 //指示灯 ,绿色 /放音指示 // sbit RELAY1=P0^5。 //继电器 1 sbit RELAY2=P0^6。 //继电器 2 sbit RELAY3=P0^7。 //继电器 3 sbit RELAY4=P2^7。 //继电器 4 // sbit BUTTON1=P2^0。 //录音开关 sbit BUTTON2=P2^1。 //放音测试 sbit BUTTON3=P2^2。 //备用 sbit BUTTON4=P2^3。 //备用 sbit BUTTON5=P2^4。 //备用 sbit BUTTON6=P2^5。 //备用 // sbit HOOK_phone=P1^5。 //摘机 /挂机控制口 1摘机 /0挂机 sbit RING=P3^7。 //铃声输入 0有铃声 /1正常 sbit STD=P3^4。 //双音频解码完成测试口 从 0变 1表示完成 sbit REMOTE=P1^6。 //遥控码输出 //ISD4002控制口 sbit SCK=P0^1。 //ISD4002串行时钟 ,由单片机提供 sbit ISD4002_SS=P0^2。 //ISD4002器件选择 sbit MOSI=P0^3。 //ISD4002串行输入端 sbit MISO=P0^4。 //ISD4002串行输出端 /* sbit ISD4002_INT=P0^0。 //ISD4002中断输出 sbit ISD4002_RAC=P1^4。 //ISD4002行地址时钟输出 */ //数据表及内存定义 uchar data pass_con=0。 //密码输入个数计数 uint data con_1min=0。 // 1分钟计数器 uchar data con_pulse=0。 //响铃声次数计数器 uchar data con_P_W_in=0。 //密码输入次数计数 uchar xdata P_W_TAB[11]。 //密码数据存放 uchar code P_W[10]={1,2,3,4,5,6,7,8,9,0}。 //预设密码值 uchar code phone_key_data[12]={1,2,3,4,5,6,7,8,9,10,11,12}。 //双音频解码值 // 1 2 3 4 5 6 7 8 9 0 * //代表的键号 // uchar bdata FLASH_FLAG=0x00。 // sbit out_time_FLG=FLASH_FLAG^0。 //操作超时标志 (1分钟 ) sbit P_W_OK=FLASH_FLAG^1。 //密码比较成功标志 /* 功能函数 */ // /************ 1毫秒延时函数 *************/ delay1ms(uint t) { int i,j。 for(i=0。 it。 i++) for(j=0。 j123。 j++) //12M晶振时。 } // // /* SPI 读写函数 */ uchar SPI_rw(uchar dat) { uchar i。 for (i=0。 i8。 i++) { MOSI = dat amp。 0x01。 SCK = 1。 dat = 1。 dat |= (uchar)MISO 7。 SCK = 0。 } return dat。 } /* ISD4002 电源唤醒 */ void ISD4002_powerup(void) { ISD4002_SS = 0。 SPI_rw(0x20)。 ISD4002_SS = 1。 } /* ISD4002 停止命令 */ void ISD4002_stop(void) { ISD4002_SS = 0。 SPI_rw(0x30)。 ISD4002_SS = 1。 } /* ISD4002 按地址录音 */ void ISD4002_record(uint addr) { ISD4002_SS = 0。 SPI_rw((uchar)(addr amp。 0x00ff))。 SPI_rw(((uchar)(addr 8) amp。 0x03) | 0xa0)。 ISD4002_SS = 1。 } /* ISD4002 按地址放音 */ void ISD4002_play(uint addr) { ISD4002_SS = 0。 SPI_rw((uchar)(addr amp。 0x00ff))。 SPI_rw(((uchar)(addr 8) amp。 0x03) | 0xe0)。 ISD4002_SS = 1。 } define SPEECH_NUM 12//分 12段录音 ISD4002120为 120秒 ,每秒 5段行地址 ,共 600段行地址 define SPEECH_LEN 10//每段 10秒 /* ISD4002 录音程序 */ void speech_record(void) { uchar i。 ISD4002_powerup()。 delay1ms(25)。 ISD4002_powerup()。 delay1ms(25)。 for (i=0。 iSPEECH_NUM。 i++) { while (BUTTON1)。 ISD4002_record(i*(5*SPEECH_LEN))。 //发录音命令 LED5 =。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。