功能用途:采用两个单片机系统实现四则运算考试及判卷功能,具体内容包括:
⑴两个单片机系统分别作为服务器和答题终端。服务器负责验证考生个人信息,发送试题到终端,定时收卷及判分功能。答题终端负责输入考生个人信息,答题,修改答案及传送答案到服务器。
⑵服务器验证考生个人信息,若信息不正确则向终端发出提示信息。信息验证正确后将试题发送到答题终端,同时开始计时。无论答题是否完成,考试时间到则强制收题。也可在考试时间尚有剩余时接收答题终端发送过来的答案。收题后进行判分工作并给出最终得分及答题情况统计信息。对回答错误的题目则给出原题及正确答案。
⑶答题终端在收到试题后向考生显示试题内容(可逐道显示)并接受考生输入的答案。试题显示应具备翻页功能以允许考生反复浏览试题或检查所作答案。当考生检查完毕且考试时间尚有剩余,允许考生向服务器发送最终答案。
⑷实现服务器和答题终端的两个单片机系统均应包含键盘和LCD液晶显示模块。两个单片机系统通过串口进行通信。
机系统通过串口进行通信。
(1)客户段代码
#include <mega16.h>
#include <delay.h>
#define BAUD 9600 // 波特率采用9600bps
#define CRYSTAL 4000000 // 系统时钟8MHz
#define BIT0 0X01
#define BIT1 0X02
#define BIT2 0X04
#define BIT3 0X08
#define BIT4 0X10
#define BIT5 0X20
#define BIT6 0X40
#define BIT7 0X80
unsigned char const BIT[]={BIT0,BIT1,BIT2,BIT3,BIT4,BIT5,BIT6,BIT7};
//计算和定义波特率设置参数
#define BAUD_SETTING (unsigned int)((unsigned long)CRYSTAL/(16*(unsigned long)BAUD)-1) // 波特率计算
#define BAUD_H (unsigned char)(BAUD_SETTING>>8) // 高8位
#define BAUD_L (unsigned char)(BAUD_SETTING) // 低8位
unsigned char const num_str[]={“0123456789”};
void USART_INIT(void);
void USART_SEND(unsigned char data); // USART发送子程序
interrupt [USART_RXC] void USART_RCV_INT(void); // USART接收中断服务
void lcd_gpio_init(void);
void LcdInitiate(void);
void LCD1602_string(unsigned char hang,unsigned char lie,unsigned char const p);
void LCD1602_char(unsigned char hang,unsigned char lie,unsigned char sign);
void KEY_INIT(void);
void KEY_CHECK(void);
void key(void);
unsigned char input_buf[16],input_cnt = 0;
unsigned char timu_buf[5][16],daan_buf[5][2];
unsigned char flag_steep = 0,rx_buf[