开始 先将低4位置1选定4行 然后判断该按键发生在哪一列 N 是否有按键按下 Y KeyNo=16 将列数赋给KeyNo 将高4位置1选定4列 再判断发生在那一行 0—3行分别附加起始值0,4,8,12 返回 图4.3键盘扫描子程序Keys_Scan() 29 开始 显示个位 显示十分位 显示百分位 显示小数点 结束 图4.4 LED显示程序Display_Result(int d) 开始 接受数据 对数据进行相关处理 调用Display_Result(m) 图4.5 主机串口接受中断子程序Serial_INT() interrupt 4 4.3 从机部分程序设计 该部分的程序包括一个主程序、三个子程序,三个子程序分别为从机串口接受中断函数Serial_INT() interrupt 4、向串口发送数据子程序putc_to_SerialPort(uchar c)和模数转换子程序ADCON。 (1)主程序 主程序是进行系统的初始化,由于主从两个单片机要进行通信,所以两个单 30 片机的初始化应该是相同的,并调用A/D转换。其流程图如图4.6所示 (2)从机串口接受中断函数Serial_INT() interrupt 4 因为发送完成和接受到新字节都会触发串口中断,因此串口中断程序里用if(RI)来表示接受中断,然后将RI清0。再判断接受到的数据第4位是否为1,如果为1,则按照主机发送过来的通道进行采集,如果为0,则调用循环采集程序。如图4.7所示 (3)模数转换子程序ADCON 先要选通ADC0809,又因为ADC0809具有8个通道,利用For循环进行8次采集,接下来选择转换通道,F8H~FFH用以选择输入模拟信号的通道IN0~IN7的选择,首先从第一个通道开始,然后执行一条读取转换结果的指令,再将转换得到的结果送给串行口,再依次循环,将通道号自增1,直到8个通道全部转换完。其流程图如图4.8所示 (4)向串口发送数据子程序putc_to_SerialPort(uchar c) 程序首先将数据发送到串行口,当T1=0时,表明传送结束。如图4.2所示 开始 初始化 启动定时器1 开中断 调用Adcon() 结束 图4.6 主程序 31 开始 接收串口数据 判断接受到的数据第4位是否为1 N Y 按选定的通道号采集 选定循环采集方式 结束 图4.7 从机串口接受中断函数Serial_INT() interrupt 4 开始 选定通道号 开始转换 转换结束将得到的数据发送给串口 结束 图4.8模数转换子程序ADCON 32