1)两个单片机系统分别作为服务器和答题终端。服务器负责验正考生个人信息,发送试愿到降端,定时收卷及判分功能。答题终端负责输入考生个人信息,答题,修改答案及传送答案到服务器。
2)服务器验证考生个人信息,若信息不正确则向终端发出提示信息。信息验证正确后将试题发送到答题终端,同时开始计时。无论答题是否完成。考试时间到则强制收题。也可在考试时同尚有剩余时接收答题终端发送过来的答案。收题后进行判分工作并给出最终得分及答题情况统计信息。对回答错误的题日则给出原题及正确答案。
3)答题终端在收到试题后向考生显示试题内容(可逐道显示)并接受考生输入的答案。试题显示应具备翻页功能以允许考生反复浏览试题或检查所作答案。当考生检查完毕且考试时间尚有剩余,允许考生向服务器发送最终答案。
4)实现服务器和答题终端的两个单片机系统均应包含键盘和lcd液品显示模块。两个单片机系统通过串口进行通信。
*************************************************
(1)给出使用说明,包括按键的定义,操作方法等。
(2)所有功能用途均可实现且各功能转换正常(模拟5道题即可)。
(3)考生个人信息包括考生姓名(可用拼音表示)和6位的学号。
(4)验收时需要演示考生个人信息不正确时的处理情况:
(5)服务器和终端都应实时显示考试剩余时间:
(6)四则运算应覆盖加减乘除四种运算:
(7)终端答题时,在未提交答案前应允许反复浏览或修改答案
服务端
#include reg52.h //此文件中定义了单片机的一些特殊功能寄存器#define uchar unsigned char#define uint unsigned inttypedef unsigned int u16; //对数据类型进行声明定义typedef unsigned char u8;sbit wr=p2^0; //数据写sbit rd=p2^1; //数据读sbit ce=p2^2; //片选sbit cd=p2^3; //指令数据通道,1指令,0数据sbit rst=p2^4; //复位信号sbit key = p3^2;uchar s_datt[2][6]={{1,2,3,4,5,6},{1,1,1,1,1,1}};uchar title[10] = {5,1,3,2,1,5,6,3,1,1};uchar answer[5] = {6,1,5,2,2};uchar r_mode;uchar r_wei;uchar r_buff[20];uint dis_tim;uint all_time=30;uchar flag_mode;uchar c_t[6];uchar bl;uchar code hz0[][32]={ {0x00,0x00,0x3e,0xfc,0x22,0x84,0x22,0x84,0x22,0x94,0x3e,0x88,0x22,0x80,0x22,0xfc,0x22,0xa4,0x3e,0xa4,0x22,0xa8,0x22,0xa8,0x22,0x90,0x42,0xa8,0x4a,0xc4,0x84,0x82},/*服,0*/{0x04,0x00,0x04,0x00,0x0f,0xf0,0x18,0x20,0x24,0xc0,0x03,0x00,0x0c,0xc0,0x32,0x30,0xc2,0x0e,0x1f,0xf0,0x02,0x10,0x04,0x10,0x04,0x10,0x08,0x10,0x10,0xa0,0x20,0x40},/*务,1*/{0x00,0x00,0x3e,0x7c,0x22,0x44,0x22,0x44,0x3e,0x7c,0x01,0x20,0x01,0x10,0xff,0xfe,0x02,0x80,0x0c,0x60,0x30,0x18,0xc0,0x06,0x3e,0x7c,0x22,0x44,0x22,0x44,0x3e,0x7c},/*器,2*/{0x01,0x00,0x21,0x08,0x11,0x08,0x09,0x10,0x09,0x20,0x01,0x00,0x7f,0xf8,0x00,0x08,0x00,0x08,0x00,0x08,0x3f,0xf8,0x00,0x08,0x00,0x08,0x00,0x08,0x7f,0xf8,0x00,0x08},/*当,3*/{0x10,0x10,0x08,0x10,0x08,0x20,0xff,0xfe,0x00,0x00,0x3e,0x08,0x22,0x48,0x22,0x48,0x3e,0x48,0x22,0x48,0x22,0x48,0x3e,0x48,0x22,0x08,0x22,0x08,0x2a,0x28,0x24,0x10},/*前,4*/{0x08,0x40,0x08,0x20,0x0b,0xfe,0x10,0x00,0x10,0x00,0x31,0xfc,0x30,0x00,0x50,0x00,0x91,0xfc,0x10,0x00,0x10,0x00,0x11,0xfc,0x11,0x04,0x11,0x04,0x11,0xfc,0x11,0x04},/*信,5*/{0x01,0x00,0x02,0x00,0x1f,0xf0,0x10,0x10,0x1f,0xf0,0x10,0x10,0x1f,0xf0,0x10,0x10,0x1f,0xf0,0x10,0x10,0x01,0x00,0x08,0x84,0x48,0x92,0x48,0x12,0x87,0xf0,0x00,0x00},/*息,6*/{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x30,0x00,0x00,0x00,0x30,0x00,0x30,0x00,0x00,0x00,0x00,0x00},/*:,7*/{0x07,0x02,0x78,0x02,0x08,0x02,0xff,0x82,0x2a,0x12,0x2a,0x92,0xeb,0x12,0x2a,0x92,0x6a,0x92,0xa9,0x92,0x1c,0x12,0x2a,0x12,0x49,0x02,0x88,0x82,0x08,0x0a,0x08,0x04},/*剩,8*/{0x01,0x00,0x01,0x00,0x02,0x80,0x04,0x40,0x08,0x20,0x10,0x10,0x2f,0xe8,0xc1,0x06,0x01,0x00,0x3f,0xf8,0x01,0x00,0x11,0x10,0x11,0x08,0x21,0x04,0x45,0x04,0x02,0x00},/*余,9*/{0x00,0x08,0x00,0x08,0x7c,0x08,0x44,0x08,0x45,0xfe,0x44,0x08,0x44,0x08,0x7c,0x08,0x44,0x88,0x44,0x48,0x44,0x48,0x44,0x08,0x7c,0x08,0x44,0x08,0x00,0x28,0x00,0x10},/*时,10*/{0x20,0x00,0x13,0xfc,0x10,0x04,0x40,0x04,0x47,0xc4,0x44,0x44,0x44,0x44,0x44,0x44,0x47,0xc4,0x44,0x44,0x44,0x44,0x44,0x44,0x47,0xc4,0x40,0x04,0x40,0x14,0x40,0x08},/*间,11*/{0x1f,0xf0,0x10,0x10,0x1f,0xf0,0x10,0x10,0x1f,0xf0,0x00,0x00,0xff,0xfe,0x22,0x00,0x3e,0xf8,0x22,0x88,0x3e,0x90,0x22,0x50,0x2f,0x20,0xf2,0x50,0x42,0x88,0x03,0x06},/*最,12*/{0x10,0x80,0x10,0x80,0x20,0xf8,0x21,0x08,0x4b,0x10,0xfc,0xa0,0x10,0x40,0x20,0xa0,0x43,0x18,0xfc,0x06,0x40,0xc0,0x00,0x20,0x18,0x10,0xe1,0x80,0x40,0x60,0x00,0x10},/*终,13*/{0x00,0x40,0x04,0x40,0x04,0x20,0x08,0x20,0x10,0x10,0x20,0x08,0x40,0x04,0x9f,0xe2,0x04,0x20,0x04,0x20,0x04,0x20,0x08,0x20,0x08,0x20,0x10,0x20,0x21,0x40,0x40,0x80},/*分,14*/{0x08,0x20,0x49,0x20,0x2a,0x20,0x08,0x3e,0xff,0x44,0x2a,0x44,0x49,0x44,0x88,0xa4,0x10,0x28,0xfe,0x28,0x22,0x10,0x42,0x10,0x64,0x28,0x18,0x28,0x34,0x44,0xc2,0x82},/*数,15*/{0x00,0x00,0x7f,0xfc,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x11,0x00,0x11,0xf8,0x11,0x00,0x11,0x00,0x11,0x00,0x11,0x00,0x11,0x00,0x11,0x00,0xff,0xfe,0x00,0x00},/*正,16*/{0x00,0x40,0x00,0x40,0xfc,0x7c,0x10,0x84,0x11,0x08,0x22,0xfe,0x3c,0x92,0x64,0x92,0x64,0xfe,0xa4,0x92,0x24,0x92,0x24,0xfe,0x3c,0x92,0x25,0x12,0x21,0x0a,0x02,0x04},/*确,17*/{0x21,0x10,0x21,0x10,0x39,0x10,0x27,0xfc,0x41,0x10,0x79,0x10,0xaf,0xfe,0x20,0x00,0xfb,0xf8,0x22,0x08,0x22,0x08,0x23,0xf8,0x2a,0x08,0x32,0x08,0x23,0xf8,0x02,0x08},/*错,18*/{0x00,0x00,0x43,0xf8,0x22,0x08,0x22,0x08,0x03,0xf8,0x00,0x00,0xe0,0x00,0x27,0xfc,0x20,0x40,0x20,0x40,0x2f,0xfe,0x20,0x40,0x28,0xa0,0x31,0x10,0x22,0x08,0x0c,0x06},/*误,19*/{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/* ,20*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},};uchar code sz[][16]={ {0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x24,0x18,0x00,0x00},/*0,0*/{0x00,0x00,0x00,0x08,0x38,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x3e,0x00,0x00},/*1,1*/{0x00,0x00,0x00,0x3c,0x42,0x42,0x42,0x02,0x04,0x08,0x10,0x20,0x42,0x7e,0x00,0x00},/*2,2*/{0x00,0x00,0x00,0x3c,0x42,0x42,0x02,0x04,0x18,0x04,0x02,0x42,0x42,0x3c,0x00,0x00},/*3,3*/{0x00,0x00,0x00,0x04,0x0c,0x0c,0x14,0x24,0x24,0x44,0x7f,0x04,0x04,0x1f,0x00,0x00},/*4,4*/{0x00,0x00,0x00,0x7e,0x40,0x40,0x40,0x78,0x44,0x02,0x02,0x42,0x44,0x38,0x00,0x00},/*5,5*/{0x00,0x00,0x00,0x18,0x24,0x40,0x40,0x5c,0x62,0x42,0x42,0x42,0x22,0x1c,0x00,0x00},/*6,6*/{0x00,0x00,0x00,0x7e,0x42,0x04,0x04,0x08,0x08,0x10,0x10,0x10,0x10,0x10,0x00,0x00},/*7,7*/{0x00,0x00,0x00,0x3c,0x42,0x42,0x42,0x24,0x18,0x24,0x42,0x42,0x42,0x3c,0x00,0x00},/*8,8*/{0x00,0x00,0x00,0x38,0x44,0x42,0x42,0x42,0x46,0x3a,0x02,0x02,0x24,0x18,0x00,0x00},/*9,9*/{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/* ,10*/{0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x08,0x7f,0x08,0x08,0x08,0x00,0x00,0x00,0x00},/*+,11*/{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*-,12*/{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x76,0x24,0x18,0x18,0x18,0x24,0x6e,0x00,0x00},/*x,13*/{0x00,0x00,0x02,0x04,0x04,0x04,0x08,0x08,0x10,0x10,0x10,0x20,0x20,0x40,0x40,0x00},/*/,14*/{0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x08,0x7f,0x08,0x08,0x08,0x00,0x00,0x00,0x00},/*=,15*/{0x00,0x00,0x00,0x00,0x00,0x00,0x7e,0x00,0x00,0x7e,0x00,0x00,0x00,0x00,0x00,0x00},/*=,16*/};void delay(uint t) //延时函数{uint i,j;for(i=0;i< 1;i++);}void delay_xms(uint x){ uint i,j; for(i=0;i< x;i++) for(j=0;j< 112;j++);}uchar read_status() //读取lcd12864的状态{uchar status;p0=0;//端口b置为输入rd=0;wr=1;ce=0;cd=1;status=p1;return status;}void check_status()//检查lcd12864的状态{uchar s; p0=0xff;//端口b置为输出while((s&0x80)!=0x80) s=read_status();//等待位1,2置为。命令读写准备好。数据读写准备好}void write_data(uchar dat)//写数据{rd=1;cd=0;ce=0;wr=0;p0=dat;delay(1);wr=1;ce=1;cd=1;}void write_cmd1(uchar cmd)//写数据1{rd=1;cd=1;ce=0;wr=0;p0=cmd;delay(1);wr=1;ce=1;cd=0;}//先送参数,再送指令void write_cmd2(uchar dat,uchar cmd){check_status();write_data(dat);check_status();write_cmd1(cmd);}void write_cmd3(uchar data1,uchar data2,uchar cmd)//发送参数并发指令再发送数据{check_status();write_data(data1);check_status();write_data(data2);check_status();write_cmd1(cmd);}void init()//lcd12864的初始化{p2=0xff;p1=0xff; rst=1;delay(10);rst=0; wr=1;rd=1;ce=1;cd=1;rst=1; check_status();write_cmd3(0x01,0x00,0x21);//光标指针设置check_status();write_cmd3(0x00,0x00,0x42);//图形区首地址check_status();write_cmd3(16,0x00,0x43);//图形区宽度check_status();write_cmd1(0x80);//显示方式设置,正常显示check_status();write_cmd1(0x98);//图形方式显示,不显示字母,只打点check_status();write_cmd1(0xa0);//光标形状设置1 0 1 0 0 n2 n1 n0}//汉字显示函数,处在x y处显示汉字void display_hz(uchar x,uchar y,uchar *hz)////x 0-3 y 0-7{uchar i,j=0;for(i=0;i< 16;i++){ write_cmd3(((j/2)< <4)|(y*2),x,0x24);//地址指针设置..低地址,高地址,命令 write_cmd2(hz[j++],0xc0); write_cmd2(hz[j++],0xc0);}}void display_sz(uchar x,uchar y,uchar *hz)////x 0-3 y 0-14{uchar i,j=0;for(i=0;i< 16;i++){ write_cmd3(((j)< <4)|y,x,0x24);//地址指针设置..低地址,高地址,命令 write_cmd2(hz[j++],0xc0);}}void uart1send(uchar c){ sbuf=c; while(!ti); ti=0; }void uart1sends(uchar *str){ while(*str!='�') { sbuf=*str; while(!ti); ti=0; str++; }}void usartinit(){ tmod=0x21; th1=0xfd; tl1=0xfd; tr1=1; sm0=0; sm1=1; ren=1; ea=1; es=1; th0=0xfc; //给定时器赋初值,定时1ms th1 tl0=0x18; //tl1 et0=1; //定时器0中断打开 et1 tr0=1; //定时器0开关打开 tr1 }void clear_n(uchar num){ uchar i; for(i=0;i< 7;i++) { display_hz(num,i,hz0[20]); }}void main(){ usartinit(); // 串口初始化 init(); delay_xms(10); display_hz(0,1,hz0[0]); display_hz(0,3,hz0[1]); display_hz(0,5,hz0[2]); display_hz(1,0,hz0[3]); display_hz(1,1,hz0[4]); display_hz(1,2,hz0[5]); display_hz(1,3,hz0[6]); display_hz(1,4,hz0[7]); display_hz(2,0,hz0[8]); display_hz(2,1,hz0[9]); display_hz(2,2,hz0[10]); display_hz(2,3,hz0[11]); display_hz(2,4,hz0[7]); display_hz(3,0,hz0[12]); display_hz(3,1,hz0[13]); display_hz(3,2,hz0[14]); display_hz(3,3,hz0[15]); display_hz(3,4,hz0[7]); while(1) { if(key == 0) { delay_xms(10); if(key == 0) { while(key==0); if(flag_mode == 3) { clear_n(0); clear_n(1); clear_n(2); clear_n(3); for(bl=0;bl< c_t[0];bl++) { display_sz(bl,0,sz[title[(c_t[bl+1]-1)*2]]); display_sz(bl,1,sz[c_t[bl+1]+10]); display_sz(bl,2,sz[title[(c_t[bl+1]-1)*2+1]]); display_sz(bl,3,sz[16]); display_sz(bl,10,sz[c_t[bl+1]]); display_sz(bl,4,sz[answer[c_t[bl+1]-1]]); } } } } }}void send_title(){ uchar i; uart1send('t'); for(i=0;i< 10;i++) { uart1send(title[i]); } }void usart_rec() interrupt 4{ unsigned char datt; if(ri == 1) { ri=0; datt=sbuf;//出去接收到的数据 if(r_mode==1) { r_buff[r_wei] = datt; r_wei++; if(r_wei == 7) { if(r_buff[0] == 1) { if(r_buff[1] == 1 && r_buff[2] == 2 && r_buff[3] == 3 && r_buff[4] == 4 && r_buff[5] == 5 && r_buff[6] == 6 ) { uart1send('d'); display_hz(1,5,hz0[16]); display_hz(1,6,hz0[17]); send_title(); flag_mode = 2; }else { uart1send('x'); display_hz(1,5,hz0[18]); display_hz(1,6,hz0[19]); } }else if(r_buff[0] == 2) { if(r_buff[1] == 1 && r_buff[2] == 1 && r_buff[3] == 1 && r_buff[4] == 1 && r_buff[5] == 1 && r_buff[6] == 1 ) { uart1send('d'); display_hz(1,5,hz0[16]); display_hz(1,6,hz0[17]); send_title(); flag_mode = 2; }else { uart1send('x'); display_hz(1,5,hz0[18]); display_hz(1,6,hz0[19]); } } r_wei = 0; r_mode = 0; } }else if(r_mode == 2) { r_buff[r_wei] = datt; r_wei++; if(r_wei == 5) { if(r_buff[0] != answer[0]) { c_t[0] ++; c_t[c_t[0]] = 1; } if(r_buff[1] != answer[1]) { c_t[0] ++; c_t[c_t[0]] = 2; } if(r_buff[2] != answer[2]) { c_t[0] ++; c_t[c_t[0]] = 3; } if(r_buff[3] != answer[3]) { c_t[0] ++; c_t[c_t[0]] = 4; } if(r_buff[4] != answer[4]) { c_t[0] ++; c_t[c_t[0]] = 5; } display_sz(3,10,sz[5-c_t[0]]); r_wei = 0; r_mode = 0; } } if(datt == 'x') { r_mode = 1; r_wei = 0; }else if(datt == 'w') { r_mode = 2; r_wei = 0; flag_mode = 3; } }}void timer0() interrupt 1 //参考上图 定时器1时为3{ th0=0xfc; //给定时器赋初值,定时1ms th1 tl0=0x18; //tl1 dis_tim++; if(dis_tim==1000) { dis_tim=0; if(flag_mode == 2) { if(all_time!=0) { all_time -- ; } display_sz(2,10,sz[all_time/10]); display_sz(2,11,sz[all_time%10]); } } } 答题端:
搞定电路设计之高精度、宽带宽电流测量信号链
开源赋能汽车智能化演进分论坛圆满举办
浅析电动机的种类及组成部分
短视频如何通过算法和算力支撑用户的增长
无线电子门铃使用时对门禁卡有影响吗?
proteus双机仿真系统
国内车灯连接器代表厂商思索技术上市进行中
苹果招聘信息暗示将自研5G芯片
基于微流控技术有望消除对造血干细胞供体的需求
基于C8051F020单片机和高速运放LM6361实现数字示波器的设计
高通业绩受打击,计划大规模裁员
智能人机交互高峰论坛开幕在即 充分交流创新技术
工业插头的制造流程介绍
华为平板M6青春版疑似通过认证 搭载麒麟810处理器以及18W快充
5G智慧灯杆网关,智慧灯杆应用的核心设备
这是要搞事情啊!京东上线小米5C手机,定价9999元,暂时没货
农残快速检测仪提供了更加便捷高效的检测方式
“穿孔卡”DNA或将意味着更便宜的大容量数据存储
【原创深度】智能城市的发展:IIoT灌溉监测是室内农业成功的关键
恩智浦:2013年业绩解读及2014年市场展望