建立网站需要哪些步骤,游戏网站开发设计报告,企业网站建设定制网站建设公司,百度开户推广文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介
本项目使用STM32F103C8T6单片机控制器#xff0c;使用按键、IIC OLED模块等。 主要功能#xff1a; 系统运行后#xff0c;OLED液晶显示出题器开机界面#xff0c;默认结果范围为100#xff0c;可按… 文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介
本项目使用STM32F103C8T6单片机控制器使用按键、IIC OLED模块等。 主要功能 系统运行后OLED液晶显示出题器开机界面默认结果范围为100可按下S13键进入范围值设置S1-S10键输入0-9数字最大输入3位数若输入有误可按下S11键撤回若输入完成可按下S12键进入答题界面如果无需设置则按下S16键进入答题界面出题的计算结果范围则为前面设置的范围内。 此时显示屏会显示答题时间、得分、计算题程序内设置了加减乘除默认仅开启加减运算功能和计算结果输入窗口可按下S1-S10键输入答案如果结果正确 得分5否则显示错误提示且需重新输入结果。答案正确则自动进入下一题如此循环。当得分为100则完成测试。 二、软件设计
/*
作者嗨小易QQ3443792007*///系统生成题目
void sys_generate_subject(void)
{u8 key0;u8 buf[3];u16 result0;OLED_Clear();OLED_ShowString(0,0, 00:00:00 Socre: ,12);OLED_ShowString((X_WIDTH-6*12)/2,16, ,24);OLED_DrawRectanglex(0,45,X_WIDTH,18,1);OLED_ShowString(2,46,-- ,16);TIM_Cmd(TIM3,ENABLE); //打开定时器 while(1){//显示时间OLED_ShowxNum(0,0,sys_ctrl.hour,2,12,0x80,1);OLED_ShowxNum(6*3,0,sys_ctrl.min,2,12,0x80,1);OLED_ShowxNum(6*6,0,sys_ctrl.sec,2,12,0x80,1);//显示得分OLED_ShowxNum(17*6,0,sys_ctrl.score,3,12,0x80,1);//开始生成题目if(sys_ctrl.start1){sys_ctrl.start0;srand(sys_ctrl.sec);//播种//生成随机符号值加和减sys_ctrl.signrand()%2;//显示符号switch(sys_ctrl.sign){case 0://加OLED_ShowString((X_WIDTH-6*12)/22*12,16,,24);//生成有效的两个计算数在指定范围数内//rand() % (b-a1) a ; 就表示 a~b 之间的一个随机整数sys_ctrl.num[0]rand()%((sys_ctrl.range-1)-11)1;sys_ctrl.num[1]rand()%(sys_ctrl.range-sys_ctrl.num[0])1;break;case 1://减OLED_ShowString((X_WIDTH-6*12)/22*12,16,-,24);//生成的第一个数必须大于第二个数while(1){sys_ctrl.num[0]rand()%((sys_ctrl.range-1)-11)1;sys_ctrl.num[1]rand()%(sys_ctrl.range-sys_ctrl.num[0])1;if(sys_ctrl.num[0]sys_ctrl.num[1])break;}break;case 2://乘OLED_ShowString((X_WIDTH-6*12)/22*12,16,*,24);sys_ctrl.num[0]rand()%((sys_ctrl.range-1)-11)1;sys_ctrl.num[1]rand()%(sys_ctrl.range-sys_ctrl.num[0])1;break;case 3://除OLED_ShowString((X_WIDTH-6*12)/22*12,16,/,24);//生成的第一个数必须大于第二个数while(1){sys_ctrl.num[0]rand()%((sys_ctrl.range-1)-11)1;sys_ctrl.num[1]rand()%(sys_ctrl.range-sys_ctrl.num[0])1;if(sys_ctrl.num[0]sys_ctrl.num[1])break;}break;}//显示生成的两个计算数OLED_ShowxNum((X_WIDTH-6*12)/2,16,sys_ctrl.num[0],2,24,0,1);OLED_ShowxNum((X_WIDTH-6*12)/23*12,16,sys_ctrl.num[1],2,24,0,1);}//开始答题else{keyKEY_Matrix_Scan();if(key!0)BEEP_Alarm(50,100);//提示音//输入数值键范围0-9if(key0 key10){//最多输入3位数if(sys_ctrl.cnt3){//第一位输入0后面都是0if(sys_ctrl.cnt0 key1){buf[sys_ctrl.cnt]key-1;OLED_ShowNum(28*3(sys_ctrl.cnt)*8,46,buf[sys_ctrl.cnt-1],1,16);} else{buf[sys_ctrl.cnt]key-1;sys_ctrl.cnt;//输入位数1OLED_ShowNum(28*3(sys_ctrl.cnt-1)*8,46,buf[sys_ctrl.cnt-1],1,16);} }}//按下删除键else if(key11){sys_ctrl.cnt--;if(sys_ctrl.cnt0)sys_ctrl.cnt0;OLED_ShowString(28*3(sys_ctrl.cnt)*8,46, ,16);} //按下确定键else if(key12){//获取范围值switch(sys_ctrl.cnt){case 1://1位sys_ctrl.resultbuf[0];break;case 2://2位sys_ctrl.resultbuf[0]*10buf[1];break;case 3://3位sys_ctrl.resultbuf[0]*100buf[1]*10buf[2];break;}//根据符号计算生成题目的数值switch(sys_ctrl.sign){case 0://加resultsys_ctrl.num[0]sys_ctrl.num[1];break;case 1://减resultsys_ctrl.num[0]-sys_ctrl.num[1];break;case 2://乘resultsys_ctrl.num[0]*sys_ctrl.num[1];break;case 3://除resultsys_ctrl.num[0]/sys_ctrl.num[1];break;}//如果答题正确if(resultsys_ctrl.result){sys_ctrl.start1;sys_ctrl.cnt0;sys_ctrl.score5;if(sys_ctrl.score100){TIM_Cmd(TIM3,DISABLE); //关闭定时器sys_parm_init();//系统参数初始化break;} OLED_ShowString(28*3,46, ,16);}//如果答题错误else{sys_ctrl.cnt0;OLED_ShowString(28*3,46,Error!,16);OLED_Refresh_Gram();//刷新显示缓存delay_ms(500);OLED_ShowString(28*3,46, ,16);}} }OLED_Refresh_Gram();//刷新显示缓存}
}//应用控制系统
void app_sys_ctrl_demo(void)
{LED_Init();USART1_Init(115200);OLED_Init();KEY_Matrix_Init();BEEP_Init();TIM3_Init(1000,36000-1); //定时500mssys_parm_init();//系统参数初始化while(1){sys_open_show();//系统开机界面显示sys_generate_subject();//系统生成题目}
} 三、实验现象
B站演示视频https://space.bilibili.com/444388619 联系作者
专注于51单片机、STM32、国产32、DSP、Proteus、ardunio、ESP32、物联网软件开发PCB设计视频分享技术交流。