可以将图像中r,g,b三个分量分别提取出来,并显示
上传时间: 2015-06-27
上传用户:lyx1998
#include<stdio.h> #include<string.h> #include<stdlib.h> #define N 100 int iNumOfStu=0; struct score { float math; float english; float computer; }; struct student { int number; char name[20]; struct score sco; float average; }; struct student stu[N]; void print_menu(void);//输出菜单 void choosemenu(void);//菜单选择 void input_student1(int);//输入学生信息 void input_student2(void);//输入总函数 void input_student3(int &,int);//判断学号是否重复 void input_student4(int,int);//覆盖原信息 void sort_student3(student s[],int);//按照英语成绩排序 void sort_student4(student s[],int);//按照计算机成绩排序 void sort_student2(student s[],int);//按照数学成绩排序 void sort_student5(student s[],int);//按照平均成绩排序 float input_score2(int);//计算学生平均成绩 void print_student2(void);//显示表头 void print_student3(int);//显示学生信息 void print_student1(int);//显示全部学生资料 void sort_student1(void);//排序总函数 void menu(void);//菜单调度总函数 int search_student2(int);//按学号查询学生信息并输出 void search_student3(int);//按平均分最高查询并输出 void search_student1(void);//查询总函数 void delete_student2(int,int);//删除学生信息 void delete_student1(void);//删除总函数 void change_student2(int);//修改学生资料 void change_student1(void);//修改总函数 void input_score3(int);//统计成绩 void input_score1(void);//统计成绩总函数 void print_help(void);//输出帮助信息 void exit_student(void);//退出系统 void save_student(student *,int);//保存学生信息 void main() { menu(); } void save_student(student *s,int a)//保存学生信息 { FILE *fp; if((fp=fopen("d:\\学生信息.txt","wb"))==NULL) { printf("不能打开文件!\n"); } else { printf("保存信息到D盘\n"); fprintf(fp,"本班所有学生具体信息如下:\r\n"); fprintf(fp," 学号 姓名 数学成绩 英语成绩 计算机成绩 平均成绩\r\n"); for(int i=0;i<a;i++) { fprintf(fp,"%8d%12s%14.2f%14.2f%14.2f%14.2f\n",stu[i].number,stu[i].name,stu[i].sco.math,stu[i].sco.english,stu[i].sco.computer,stu[i].average); fprintf(fp,"\r\n"); } fclose(fp); printf("信息保存成功!\n"); } } void exit_student(void)//退出系统 { exit(1); } void print_help(void)//输出帮助信息 { printf("本系统所能容纳的最大学生数为%d人\n学生信息保存在D盘根目录下,保存文件为“学生信息.txt”。\n感谢使用!\n",N); } void input_score1(void)//统计成绩总函数 { int c; c=search_student2(iNumOfStu); printf("学号:%d\n",stu[c].number); printf("姓名:%s\n",stu[c].name); input_score3(c); printf("新成绩录入成功!\n"); stu[c].average=input_score2(c); } void input_score3(int a)//统计成绩 { printf("数学新成绩:"); scanf("%f",&stu[a].sco.math); printf("英语新成绩:"); scanf("%f",&stu[a].sco.english); printf("计算机新成绩:"); scanf("%f",&stu[a].sco.computer); } void change_student2(int a)//修改学生资料 { printf("学号:%d----修改为:",stu[a].number); scanf("%d",&stu[a].number); getchar(); printf("姓名:%s----修改为:",stu[a].name); gets(stu[a].name); printf("数学成绩:%.2f----修改为:",stu[a].sco.math); scanf("%f",&stu[a].sco.math); printf("英语成绩:%.2f----修改为:",stu[a].sco.english); scanf("%f",&stu[a].sco.english); printf("计算机成绩:%.2f----修改为:",stu[a].sco.computer); scanf("%f",&stu[a].sco.computer); } void change_student1(void)//修改总函数 { int c; c=search_student2(iNumOfStu); getchar(); printf("是否要修改此学生信息?(“y”代表是)"); char d; scanf("%c",&d); if(d=='y'||d=='Y') { change_student2(c); stu[c].average=input_score2(c); printf("信息修改成功!\n"); } } void delete_student1(void)//删除总函数 { int c; c=search_student2(iNumOfStu); getchar(); printf("是否删除此条记录?(“y”代表是)"); char d; scanf("%c",&d); if(d=='y'||d=='Y') { delete_student2(c,iNumOfStu); printf("记录已删除!\n"); } } void delete_student2(int a,int b)//删除学生信息 { for(int i=a;i<b-1;i++) { stu[i]=stu[i+1]; } --iNumOfStu; } void search_student1(void)//查询总函数 { printf("1、按学号查询\n2、按平均分最高查询\n请选择:"); int c; scanf("%d",&c); switch(c) { case 1: { search_student2(iNumOfStu); break; } case 2: { search_student3(iNumOfStu); break; } default: break; } } void menu(void)//菜单调度总函数 { print_menu(); choosemenu(); } void sort_student1(void)//排序总函数 { printf("1、按数学成绩排序\n2、按英语成绩排序\n3、按计算机成绩排序\n4、按平均成绩排序\n请选择:"); int c; scanf("%d",&c); switch(c) { case 1: { sort_student2(stu,iNumOfStu); break; } case 2: { sort_student3(stu,iNumOfStu); break; } case 3: { sort_student4(stu,iNumOfStu); break; } case 4: { sort_student5(stu,iNumOfStu); break; } default: break; } } void print_student1(int a)//显示全部学生资料 { printf("本班所有学生具体信息如下\n"); print_student2(); for(int i=0;i<a;i++) { print_student3(i); } } void print_student3(int a)//显示学生信息 { printf("%8d%12s%14.2f%14.2f%14.2f%14.2f\n",stu[a].number,stu[a].name,stu[a].sco.math,stu[a].sco.english,stu[a].sco.computer,stu[a].average); } void print_student2(void)//显示表头 { printf(" 学号 姓名 数学成绩 英语成绩 计算机成绩 平均成绩\n"); } void input_student4(int a,int b)//覆盖原信息 { stu[a]=stu[b-1]; --iNumOfStu; } void input_student3(int &a,int b)//判断学号是否重复 { if(a!=0) { int i=0; do { if(stu[a].number==stu[i].number) { printf("此学号代表的学生已录入\n1、覆盖原信息\n2、重新输入\n请选择:"); int c; scanf("%d",&c); switch(c) { case 1: { input_student4(i,iNumOfStu); a=iNumOfStu-1; printf("信息已替换!\n"); break; } case 2: { printf("请重新输入学生信息:\n"); input_student1(iNumOfStu-1); break; } default: break; } break; } ++i; } while(i<b-1); } } void print_menu(void)//输出菜单 { printf("======欢迎来到学生信息管理系统======\n"); printf(" 1、输入学生资料\n"); printf(" 2、删除学生资料\n"); printf(" 3、查询学生资料\n"); printf(" 4、修改学生资料\n"); printf(" 5、显示学生资料\n"); printf(" 6、统计学生成绩\n"); printf(" 7、排序学生成绩\n"); printf(" 8、保存学生资料\n"); printf(" 9、获取帮助信息\n"); printf(" 10、退出系统\n"); printf("====================================\n"); printf("请选择:"); } void input_student2(void)//输入总函数 { char end; printf("请输入学生信息(在最后一个学生信息录入完成后以“/”结束录入):\n"); for(int i=0;(end=getchar())!='/';i++) { input_student1(i); ++iNumOfStu; input_student3(i,iNumOfStu); } for(int j=0;j<iNumOfStu;j++) { stu[j].average=input_score2(j); } } void input_student1(int a)//输入学生信息 { printf("学号:"); scanf("%d",&stu[a].number); getchar(); printf("姓名:"); gets(stu[a].name); printf("数学成绩:"); scanf("%f",&stu[a].sco.math); printf("英语成绩:"); scanf("%f",&stu[a].sco.english); printf("计算机成绩:"); scanf("%f",&stu[a].sco.computer); } float input_score2(int a)//计算学生平均成绩 { return (stu[a].sco.math+stu[a].sco.english+stu[a].sco.computer)/3; } void search_student3(int a)//按平均分最高查询并输出 { int max=0; for(int i=0;i<a;i++) { if(stu[max].average<stu[i].average) { max=i; } } print_student2(); print_student3(max); } void sort_student2(student s[],int a)//按照数学成绩排序 { struct student temp; for(int i=0;i<a-1;i++) { int max=i; for(int j=i+1;j<a;j++) if(stu[j].sco.math>stu[max].sco.math) { max=j; } if(max!=i) { temp=stu[max]; stu[max]=stu[i]; stu[i]=temp; } } print_student2(); for(int k=0;k<a;k++) { print_student3(k); } } void sort_student3(student s[],int a)//按照英语成绩排序 { struct student temp; for(int i=0;i<a-1;i++) { int max=i; for(int j=i+1;j<a;j++) if(stu[j].sco.english>stu[max].sco.english) { max=j; } if(max!=i) { temp=stu[max]; stu[max]=stu[i]; stu[i]=temp; } } print_student2(); for(int k=0;k<a;k++) { print_student3(k); } } void sort_student4(student s[],int a)//按照计算机成绩排序 { struct student temp; for(int i=0;i<a-1;i++) { int max=i; for(int j=i+1;j<a;j++) if(stu[j].sco.computer>stu[max].sco.computer) { max=j; } if(max!=i) { temp=stu[max]; stu[max]=stu[i]; stu[i]=temp; } } print_student2(); for(int k=0;k<a;k++) { print_student3(k); } } void sort_student5(student s[],int a)//按照平均成绩排序 { struct student temp; for(int i=0;i<a-1;i++) { int max=i; for(int j=i+1;j<a;j++) if(stu[j].average>stu[max].average) { max=j; } if(max!=i) { temp=stu[max]; stu[max]=stu[i]; stu[i]=temp; } } print_student2(); for(int k=0;k<a;k++) { print_student3(k); } } int search_student2(int a)//按照学号查找学生并输出 { int num; int c; printf("请输入要查询的学号:"); scanf("%d",&num); for(int i=0;i<a;i++) { if(num==stu[i].number) { c=i; } } printf("此学生的信息是:\n"); print_student2(); print_student3(c); return c; } void choosemenu(void)//菜单选择 { int i; scanf("%d",&i); switch(i) { case 1: { input_student2(); printf("按回车键返回主菜单"); getchar(); getchar(); menu(); break; } case 2: { delete_student1(); printf("按回车键返回主菜单"); getchar(); getchar(); menu(); break; } case 3: { search_student1(); printf("按回车键返回主菜单"); getchar(); getchar(); menu(); break; } case 4: { change_student1(); printf("按回车键返回主菜单"); getchar(); getchar(); menu(); break; } case 5: { print_student1(iNumOfStu); printf("按回车键返回主菜单"); getchar(); getchar(); menu(); break; } case 6: { input_score1(); printf("按回车键返回主菜单"); getchar(); getchar(); menu(); break; } case 7: { sort_student1(); printf("按回车键返回主菜单"); getchar(); getchar(); menu(); break; } case 8: { save_student(stu,iNumOfStu); printf("按回车键返回主菜单"); getchar(); getchar(); menu(); break; } case 9: { print_help(); printf("按回车键返回主菜单"); getchar(); getchar(); menu(); break; } case 10: { exit_student(); } default: break; } } 运行结果: 源文件下载地址: http://115.com/file/clnq138g#一个简单的学生成绩管理系统.rar (请将此地址复制到浏览器地址栏中访问下载页面)
标签: 成绩查询系统
上传时间: 2019-06-08
上传用户:啊的撒旦
全国大学生电子设计竞赛2020年TI杯模拟电子系统设计专题邀请赛多种幅度调制信号发生电路(B 题)
上传时间: 2021-07-08
上传用户:st-15180703380
摘要: 智能机器人仿真系统,由于智能机器人受到自身多传感器信息融合和控制多样性等因素的影响,仿真系统设计主要都 是以数学建模的形式化仿真为主,无法实现数学建模与场景实现协调仿真。为此,首先分析两轮移动机器人数学运动模型, 然后设计与机器人控制系统相关的传感器数据采集分析、机器人智能自动控制和人工控制等模块,以实现机器人控制的真 实场景。仿真系统利用 LabVIEW 设计控制界面,并结合 Robotics 工具包的建模、计算和控制功能。仿真结果表明设计的平 台更适合教学和实验室研究,并可为实际的物理过程提供数据参考和决策建议。 关键词: 机器人; 虚拟; 系统仿真 中图分类号: TP242 文献标识码: B1 引言 随着测控技术的发展,虚拟仪器技术已成为工业控制和 自动化测试等领域的新生力量[1]。而机器人作为一种新型 的生产工具,应用范围已经越来越广泛,几乎渗透到各个领 域,是一项多学科理论与技术集成的机电一体化技术。目前 机器人仿真系统主要集中在复杂的机器人数学模型构建与 形式化仿真,无法实现分析机器人运动控制的静态和动态特 性,更加无法实现控制的真实场景[2]。为了改善专业控制软 件在硬件开发周期较长的缺点,本文拟建立一个基于通用软 件的实时仿真和控制平台,以更适合教学和实验室研究。本 文以通用仿真软件 LabVIEW 和 Robotics [3]为实时仿真与控 制平台,采用 LabVIEW 搭建控制界面,利用 Robotics 在后台 进行系统模型和优化控制算法计算,使其完成机器人控制系 统应有的静态和动态性能分析,不同环境下传感器变化模拟 显示以及目标路径形成等功能。 2 系统构成 仿真系统的构成主要包括了仿真界面、主控制界面、障 碍检测、智能控制和人工控制模块。其中主要对人工控制和 智能控制进行程序设计。仿真运行时,障碍检测一直存在, 主要是为了在智能控制模式下的智能决策提供原始数据。 在人工控制模式下,障碍检测依然存在,只不过对机器人行 动不产生影响,目的是把环境信息直观
标签: 智能机器人
上传时间: 2022-03-11
上传用户:
随着光伏发电系统快速发展,以及电动汽车充电桩的普及,传统的剩余电流保护器无法满足实际需求。介绍了一款B型剩余电流保护器,采用磁调制剩余电流互感器和零序电流互感器采集剩余电流。根据GB/T 22794—2017标准要求,可识别1 kHz及以下的正弦交流、带和不带直流分量的脉动直流、平滑直流等剩余电流信号。经信号调理电路将电压信号送到单片机进行采集和判断。通过试验测试,该样机在测试精度和速度上均符合国家标准的相关要求。The rapid development of photovoltaic power generation systems and the popularity of electric vehicle charging piles make the traditional residual current protective devices unable to meet the actual demand.This paper proposed a type B residual current protective device,which uses the magnetically modulated residual current transformer and the zero sequence current transformer to acquire the residual current.According to the requirements of GB/T 22794—2017,the type B residual current protective device can detect sinusoidal AC residual current of 1kHz and below 1kHz,pulsating DC residual current with and without DC component,smooth DC residual current and so on.The signal processing circuit sends the voltage signal to the MCU for acquisition and judgment.Through experimental tests,the device meets the relevant requirements of national standards in terms of test accuracy and speed.
标签: 电流保护器
上传时间: 2022-03-27
上传用户:
产品型号:VK2C21A/B/C/D 产品品牌:VINKA/永嘉微/永嘉微电 封装形式:SOP28/24/20/16 裸片:DICE(邦定COB)/COG(邦定玻璃用) 产品年份:新年份 联 系 人:许硕 原厂直销,工程服务,技术支持,价格最具优势!QT446 VK2C21A/B/C/D概述: VK2C21是一个点阵式存储映射的LCD驱动器,可支持最大80点(20SEGx4COM)或者最大128点(16SEGx8COM)的LCD屏。单片机可通过I2C接口配置显示参数和读写显示数据,也可通过指令进入省电模式。其高抗干扰,低功耗的特性适用于水电气表以及工控仪表类产品。 特点: ★ 工作电压 2.4-5.5V ★ 内置32 kHz RC振荡器 ★ 偏置电压(BIAS)可配置为1/3、1/4 ★ COM周期(DUTY)可配置为1/4、1/8 ★ 内置显示RAM为20x4位、16x8位 ★ 帧频可配置为80Hz、160Hz ★ 省电模式(通过关显示和关振荡器进入)
标签: VK2C 21 LCD 应用于 抗干扰 环境 液晶驱动
上传时间: 2022-06-07
上传用户:2937735731
一、 实验目的使用 51单片机的八位数码管顺序显示自己的学号。掌握 C 语言、汇编语言两种编程单片机控制程序的方法。掌握使用 Keil 4 或 Keil 5 软件编写、编译、调试程序的方法。掌握使用 Proteus 软件绘制电路原理图、硬件仿真和程序调试。二、实验设备笔记本电脑51 单片机(普中科技)八位数码管(单片机上已集成)应用程序:Proteus 8.0、Keil uVision5、stc-isp-v6.88E三、实验原理(1)数码管数码管按段数可分为七段数码管和 8 段数码管,八段数码管比七段数码管多一个发光二极管单元,也就是多一个小数点(DP),这个小数点可以更精确的表示数码管想要显示的内容。按能显示多少个(8),可分为 1 位、2位、3位、4位、5 位、6位、7 位等数码管。按发光二极管单元连接方式可分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管,共阳数码管在应用时将公共极 COM 接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮,当某一字段的阴极为高电平时,相应字段就不亮。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管,共阴数码管在应用时应将公共极 COM 接到地线 GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮,当某一字段的阳极为低电平时,相应字段就不亮。(2)51单片机单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器 CPU、随机存储器 RAM、只读存储器ROM、多种 I/O口和中断系统、定时器/计数器等功能集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。MSC-51 单片机指以 8051为核心的单片机,由美国的 Intel 公司在 1980 年推出,80C51 是 MCS-51系列中的一个典型品种;其它厂商以 8051为基核开发出的CMOS 工艺单片机产品统称为 80C51 系列。本实验中我使用普中科技的 51 单片机来点亮八位数码管并使其显示我的学号(20198043)。四、 实验 过程(1)熟悉数码管使用 Proteus 软件构建电路图,学会如何点亮数码管,熟悉如何使数码管显示不同的数字(0-9)。我们可以按照上面的原理图让对应的段导通,以显示数字。对于共阳数码管,若显示数字 0,可以让标号为 A,B,C,D,E,F 的段导通,标号为 G,H 的段不导通,然后将阳极通入高电压,即显示数字 0。代码举例如下:最后效果如下,成功点亮一个数码管。经过更多尝试和学习,学会使多位数码管显示多位数字。结果举例如下:(2)多位数码管显示学号为了显示我们学号,就不能只使用一位数码管,需要使用八位数码管,相较于单位数码管,多位数码管更加复杂,驱动函数有很大区别。多位数码管使用同一组段选,不同的位选,因此就不能够一对一地固定显示,这就需要动态扫描。动态扫描:利用人眼视觉暂留,多位数码管每次只显示一位数字,但是切换频率大于 200HZ(50 × 4),这样就能让人产生同时显示多个数字的错觉。具体操作是轮流向数码管送字形码和相应的位选。一个完整的驱动程序不只以上这些,一个完整的数码管驱动有 6部分:1. 码表(ROM):存储段码(一般放在 ROM中,节省 RAM空间),例如数字 0的段码就是 0xC0,码表则包含 0-9的段码2. 显存(RAM):保存要显示的数字,取连续地址(便于查表)3. 段选赋值:通过查表(码表)操作,将显存映射到段码4. 位选切换:切换显示的位置5. 延时:显示的数字短暂保持,提升亮度6. 消影:消除切换时不同位置互相影响而产生的残影
上传时间: 2022-06-08
上传用户:canderile
摘要:随荐电力电子设备、交直流电弧炉和电气化铁道等非线性、冲击性负荷的大量接入电网,引起了电网无功功率不足、电压波动与闪变、三相供电不平衡以及电压电流波形畸变等其它一系列电能质景问题,并严重威胁着电力系绕的安全稳定运行。首先,本文介绍了无功功率的基本概念,介绍了无功功率对电力系统的影响以及无功补偿的作用,并详尽的闸述了国内外无功补偿装置的历史以及现状。其次,本文详细分析了静止无功补偿器(SVC)和静止无功发生器(SVC)的基本结构,控制方法和工作原理,以及各自优特点。并且阐述了它们的工作特性。再次,本文着重进行了对SVG型静止无功补偿器提高系统电压的理论研究。利用MATLAB/SIMLINK仿真软件对SVG工作方式及利用SVG动态提高系统电压的原理进行仿真研究。并对仿真结果进行了全面外析VRe,本完成了(利t功补t控制器的设计,该控a器a系统硬件上采用了由STC生产的STCIOFO8X单片机作为主控制器。采用ATT7022作为电能检测芯片,实现电网参数的精确深样与计算,在系统软件上采用品刚管控制投切电容器,实现了电容器的快速,无弧的投切。采用全中文液品显示界面实时显示系统运行状况.关;无,SVG,svc,STC10FO8X随着现代电力电子技术的飞速发展,大量大功率、非线性负荷的接入电网中,使得电网供电质量受到了严重的威胁。特别是一些像电弧炉、轧机、整流桥等非线性和冲击性负荷的大量使用是导致电能质量恶化的最主要来源,造成了一系列严重的影响理想状态的电力供应要求频率为50Hz,电压幅值稳定在额定值的标准正弦波形。在三相电网供电系统中,A,B.C三相电压电流的幅值大小相等、相位差依次落后120度。但当电力用户的各种用电装置接入电力系统后,电力供应由理想的电力供应变成了电压电流偏离这种状态的非理想状态。电网中的许多用电负荷都具有低功率因数、非线性、不平衡性和冲击性的特征,这些特征严重地危害着电网的电力供应,可表现在:电压值跌落或浪涌、各次谐波含量大、电压波形发生闪变、电压电流波形失真等,这样便出现了电能质量问题。实际电网中的电能质量问题主要表现如下:
上传时间: 2022-06-17
上传用户:
1、本课题任务如下:设计一个具有特定功能的电子钟。该电子钟上电或按键复位后能自动显示系统提示符"P.",进入时钟准备状态;第一次按电子钟启动/调整键,电子钟从0时0分0秒开始运行,进入时钟运行状态;再次按电子钟启动/调整键,则电子钟进入时钟调整状态,此时可利用各调整键调整时间,调整结束后可按启动/调整键再次进入时钟运行状态。2、本课题要求如下:(1)在AT89S51的PO口和P2口外接由六个LED数码管(LED5~LEDO)构成的显示器,用PO口作LED的段码输出口(PO.0~P0.7对应于LED的a-dp),P2.5-P2.0作LED的位控输出线(P2.5~P2.0对应于LED5~LEDO),P1口外接四个按键A、B,C.D(对应于P1.0~P1.3).(2)、利用六个LED显示当前时间。(3)、四个按键的功能:A键用于电子钟启动/调整;B键用于调时,范围0-23,0为24点,每按一次时加1;C键用于调分,范围0-59,0为60分,每按一次分加1:D键用于调秒,范围0-59,0为60秒,每按一次秒加1.(4)、单片机采用AT89S51,fasc-12MHz(5)、电子钟供电电源电路的设计。
上传时间: 2022-06-19
上传用户:aben
论文以松下FP1系列PLC为研究对象,对其MEWTOCOL-COM协议,有关远程测控系统开发,以及PLC指令的机器代码进行系统研究,并在此基础上开发B/S模式的Web远程测控系统。论文首先介绍了PLC的运用领域和发展前景;其次对MEWTOCOL-COM协议进行了系统的研究分析,以实验统计的方式,得出了PLC基本指令的机器代码表;接着基于LABVIEW10.0,开发了PLC与上位机的人机界面,简单实现了上位机对PLC端口,寄存器,定时器以及布尔命令的读写功能。接下来又介绍了通讯原理和通讯模式,描述了LABVIEW10.0中的通讯函数,然后以16盏流水灯为例子,先在向PLC输入梯形图,然后在通讯系统上对PLC的进行监控,以16盏布尔灯显示其运行过程。接着比较分析了Date Socket通讯,TCP通讯和Web通讯的优缺点,并解释了最终通讯方案选择的原因。最后基于Web通讯技术实现了PLC与上位机的远程通讯。本文技术对进一步研发PLC与上位机通讯系统提供了一定的借鉴作用,尤其机代码的测定在后续进一步开发通讯界面提供了新的方向。
上传时间: 2022-06-25
上传用户:得之我幸78