2019/12/18号补档

总结

目前亟需掌握调用函数、指针、数组的概念。今天写了如下代码:

将一串小写字符转化为大写字符

#include<stdio.h>
int main()
{
	char c1,c2;
	printf("请输入数个字母\n");
	while ((c1 = getchar()) != '\n')
	{
		if (c1 >= 65 && c1 <= 91)
			c2 = c1 + 32;
		if (c1 >= 97 && c1 <= 123)
			c2 = c1 - 32;
		printf("%c", c2);
	}
	return 0;
}

注意事项:小写a的ASCII码值是97,大写A的ASCII码值是65,大写字母和小写字母相差了32。输出指令要加在循环体内。

输入随机范围,求0到该数该范围内的质数

#include<stdio.h>
int main()
{
	int a, i,b,t=0, flag;
	printf("请输入一个整数,该整数为范围最大值(最小值为0)\n");
	scanf_s("%d", &a);
	for (b = 2; b < a; b++)
	{
		flag = 1;
		for (i = 2; i < b; i++)
		{
			if (b % i == 0)
			{
				flag = 0;
				break;
			}	
		}
		if (flag == 1)
		{
			printf("%d ", b);
			t++;
		}
	}
	printf("共有%d个数\n", t);
	return 0;
}

注意事项:if语句要放在第二个for循环的外部。

字母加密(每个字母的ASCII码往前加2,yz转为ab)

#include <stdio.h>
int main()
{
	char i;
	printf("请输入一串字母\n");
	while ((i = getchar()) != '\n')
	{
		if ((i >= 'a' && i <= 'x') || (i >= 'A' && i <= 'X'))
			i += 2;
		else if (i == 'y' || i == 'Y' || i == 'z' || i == 'Z')
			i -= 24;
		putchar(i);
	}
	
	return 0;
}

注意事项:由于一串字母的结尾一定是\n,故while循环的终止条件为读到\n。

冒泡排序并插入一个数

#include <stdio.h>
int main()
{
	int a[6], i, t,j,b;
	printf("请输入5个整数\n");
	for (i = 0; i < 5; i++)
		scanf_s("%d", &a[i]);
	for (i = 0; i < 5; i++)
	
		for (j = 0; j < (5 - 1 - i); j++)
		{
			if (a[j] > a[j + 1])
				t = a[j + 1], a[j + 1] = a[j], a[j] = t;
		}
	printf("排序后\n");
	for (i = 0; i < 5; i++)
		printf("%d ", a[i]);
	printf("请输入要插入的整数\n");
	scanf_s("%d", &b);
	for (i = 4; i >= 0; i--)
	{
		if (b > a[i])
		{
			a[i + 1] = b;
			break;
		}
		else
			a[i + 1] = a[i],a[i]=b;
	}
	printf("插入后的数组为\n");
	for (i = 0; i < 6; i++)
		printf("%d ", a[i]);
	return 0;
}

注意事项:数组里第n个数是它的下标-1

基于可靠性评估序贯蒙特卡洛模拟法的配电网可靠性评估研究(Matlab代码实现)内容概要:本文围绕“基于可靠性评估序贯蒙特卡洛模拟法的配电网可靠性评估研究”,介绍了利用Matlab代码实现配电网可靠性的仿真分析方法。重点采用序贯蒙特卡洛模拟法对配电网进行长时间段的状态抽样与统计,通过模拟系统元件的故障与修复过程,评估配电网的关键可靠性指标,如系统停电频率、停电持续时间、负荷点可靠性等。该方法能够有效处理复杂网络结构与设备时序特性,提升评估精度,适用于含分布式电源、电动汽车等新型负荷接入的现代配电网。文中提供了完整的Matlab实现代码与案例分析,便于复现和扩展应用。; 适合人群:具备电力系统基础知识和Matlab编程能力的高校研究生、科研人员及电力行业技术人员,尤其适合从事配电网规划、运行与可靠性分析相关工作的人员; 使用场景及目标:①掌握序贯蒙特卡洛模拟法在电力系统可靠性评估中的基本原理与实现流程;②学习如何通过Matlab构建配电网仿真模型并进行状态转移模拟;③应用于含新能源接入的复杂配电网可靠性定量评估与优化设计; 阅读建议:建议结合文中提供的Matlab代码逐段调试运行,理解状态抽样、故障判断、修复逻辑及指标统计的具体实现方式,同时可扩展至不同网络结构或加入更多不确定性因素进行深化研究。
#include <REG52.H> #include "Timer0.h" #include "avoid.h" #include "track.h" #include "sport.h" #include "light.h" #include "yaokong.h" #include "basic_function.h" //定义蜂鸣器 //sbit SB1 = P0^6; //定义按键 sbit S4 = P3^2; sbit S3 = P3^4; //定义传感器 避障红外传感器 输出0时检测到障碍 sbit need_avoid = P3^7; sbit SB1=P0^6; //定义蜂鸣器端口 //idata bit start_stop_flag = 0; //定义标志位 bit start_stop_flag = 0; //启动标志位 bit avoid_flag = 0; //进行避障标志位 #define ShowPort P2 #define uchar unsigned char //重定义无符字符类型 //uchar code LedShowData[]={0x03,0x9F,0x25,0x0D,0x99, //定义数码管显示数据 // 0x49,0x41,0x1F,0x01,0x19};//0,1,2,3,4,5,6,7,8,9 unsigned char mode = 1; void Timer0_ISR() interrupt 1 using 1 { // 重装载定时值 TL0 = 0x00; TH0 = 0xDC; } void car_proc() //模式启动、停止函数 { if(S4 == 0) //按键S4 { Delay(20); while(S4 == 0); Delay(20); start_stop_flag ^= 1; SB1 = 0; Delay(50); SB1 = 1; Delay(50); SB1 = 0; Delay(50); SB1 = 1; Delay(50); } } void mode_proc() //模式切换函数 { if(S3 == 0) //按键S3 { Delay(50); if(S3 == 0) { mode = mode+1; SB1 = 0; Delay(50); SB1 = 1; Delay(50); if(mode > 6) { mode = 1; } while(S3 == 0); // Delay(20); } } switch(mode) { case 1: // 模式1 红外避障模式 { P2=0x9E; //数码管显示1 if(start_stop_flag == 1) { avoid(); } else { tingzhi(); } Delay(1); } break; case 2: { //模式2 循迹模式 P2=0x25; //数码管显示2 if(start_stop_flag == 1) { track(); } else { tingzhi(); } Delay(1); } break; case 3: //模式4 寻光模式 { P2=0x0D; //数码管显示4 if(start_stop_flag == 1) { light(); } else { tingzhi(); } Delay(1); } break; case 4: // 组合模式:避障优先级高于循迹 { P2 = 0x99; // 数码管显示 3,代表组合模式 avoid_flag = 0; if( need_avoid == 1 || start_stop_flag == 1) { SB1 = 1; track(); // 执行循迹动作 avoid_flag = 1; } // 如果不需要避障,执行循迹 if (need_avoid == 0 && avoid_flag == 1) { SB1 = 0; avoid_part1(); // 执行避障动作 } Delay(1); } break; case 5: //模式5 遥控模式 P2=0x49; //数码管显示5 if(start_stop_flag == 1) { yaokong(); } else { tingzhi(); } Delay(1); break; case 6: //模式6 基本功能模式(自行前进、后退、转圈、转弯) P2=0x41; //数码管显示5 if(start_stop_flag == 1) { basic_function(); } else { tingzhi(); } Delay(1); break; } } void main() { Timer0_Init(); while(1) { car_proc(); //按键S4 启动函数 mode_proc(); //按键S3 功能切换函数 } } 这是我的主要函数代码#include <reg52.h> #include "sport.h" #include "Timer0.h" #include "basic_function.h" /* 电机口定义 */ sbit M1A = P0^0; //INPUT1 左电机 反转 sbit M1B = P0^1; //INPUT2 左电机 正转 sbit M2A = P0^2; //INPUT3 右电机 反转 sbit M2B = P0^3; //INPUT4 右电机 正转 sbit M1 = P0^4; //ENA端口 左电机 sbit M2 = P0^5; //ENB端口 右电机 #define uchar unsigned char #define ShowPort P2 uchar code LedShowData[]={0x03,0x9F,0x25,0x0D,0x99, 0x49,0x41,0x1F,0x01,0x19}; //定义数码管显示数据 0,1,2,3,4,5,6,7,8,9 unsigned char Counter,Compare1,Compare2;//Compare越大速度越大 //void Timer0_Init(void) //{ // TMOD &= 0xF0; //设置定时器模式 // TMOD |= 0x01; //设置定时器模式 // TL0 = 0x9C; //设置定时初值 // TH0 = 0xFF; //设置定时初值 // TF0 = 0; //清除TF0标志 // TR0 = 1; //定时器0开始计时 // ET0=1; // EA=1; // PT0=0; //} void Timer0_Routine() interrupt 1 { TL0 = 0x9C; //设置定时初值 TH0 = 0xFF; //设置定时初值 Counter++; Counter%=100; //计数值变化范围限制在0~99 if(Counter<Compare1) //计数值小于比较值 左电机 { M1 = 1; } else //计数值大于比较值 { M1 = 0; } if(Counter<Compare2) //计数值小于比较值 右电机 { M2 = 1; //输出1 } else //计数值大于比较值 { M2 = 0; //输出0 } } //B正转,A反转 void delayms1(unsigned int ms) { unsigned int i, j; for(i = 0; i < ms; i++) for(j = 0; j < 123; j++); } void circle() //转圈——左 { ShowPort = LedShowData[3]; //数码管显示3 zuozhuan(); delayms1(3000); } //差速转弯 void left_f_qianjin() { Compare1 = 40; M1A = 0;M1B = 1; } void left_s_qianjin() { Compare1 = 40; M1A = 1;M1B = 0; } void right_f_qianjin() { Compare2 = 40; M2A = 0;M2B = 1; } void right_s_qianjin() { Compare2 = 40; M2A = 1;M2B = 0; } void big_turn() //大转弯——左 { ShowPort = LedShowData[5]; //数码管显示5 // Compare1 = 45; // Compare2 = 90; // 左电机转速慢档,右电机转速快档 // qianjin(); left_f_qianjin(); right_s_qianjin(); delayms1(600); } void small_turn() //小转弯——右 { ShowPort = LedShowData[6]; //数码管显示6 // Compare2 = 45; // Compare1 = 90; // 左电机转速快档,右电机转速慢档 // qianjin(); left_s_qianjin(); right_f_qianjin(); delayms1(400); } void go_f() //全速前进 数码管显示1 { ShowPort = LedShowData[1]; //数码管显示1 Compare1 = Compare2 =100; qianjin(); } void go_m() //中速前进 { ShowPort = LedShowData[7]; //数码管显示7 Compare1 = Compare2 =70; qianjin(); } void go_s() //慢速前进 { ShowPort = LedShowData[4]; //数码管显示4 Compare1 = Compare2 =40; qianjin(); } void back_f() //全速后退 { ShowPort = LedShowData[2]; //数码管显示2 Compare1 = Compare2 =100; houtui(); } void back_m() //中速后退 { Compare1 = Compare2 =70; houtui(); } void back_s() //慢速后退 { Compare1 = Compare2 =40; houtui(); } void basic_function() { go_f(); //100%前进 3S delayms1(3000); tingzhi(); delayms1(100); back_f(); //100%后退 3S delayms1(3000); ShowPort = LedShowData[0]; tingzhi(); //静止 3S delayms1(3000); circle(); //原地转圈3S ——左 tingzhi(); delayms1(100); go_s(); //40%前进 delayms1(3000); tingzhi(); delayms1(100); big_turn(); //大转弯 —— 右 tingzhi(); delayms1(100); go_s(); //40%前进 delayms1(3000); tingzhi(); delayms1(100); small_turn(); //小转弯 —— 左 tingzhi(); delayms1(100); go_m(); //70%前进 delayms1(3000); tingzhi(); delayms1(1000); //每完成一个循环 停止1s,再进入下一循环 } #ifndef __BASIC_FUNCTION_H__ #define __BASIC_FUNCTION_H__ void basic_function(); #endif 这是基本功能部分的代码#include <reg52.h> #include <intrins.h> #include "light.h" #include "avoid.h" #include "track.h" #include "sport.h" #include "yaokong.h" typedef unsigned char uchar; typedef unsigned int uint; // ===== 模式定义 ===== #define MODE_REMOTE 0 #define MODE_TRACK 1 #define MODE_AVOID 2 #define MODE_LIGHT 3 uchar currentMode = MODE_REMOTE; // 当前模式变量 //// ===== 数码管显示数据(共阴极)===== //extern uchar code LedShowData[] = { // 0x03, 0x9F, 0x25, 0x0D, 0x99, // 0-4 // 0x49, 0x41, 0x1F, 0x01, 0x19 // 5-9 //}; #define ShowPort P2 // ===== 引脚定义 ===== sbit IRIN = P3^3; // 红外接收 sbit LeftLed = P2^0; // 左侧指示灯 sbit M1A = P0^0; sbit M1B = P0^1; // 电机驱动 sbit M2A = P0^2; sbit M2B = P0^3; sbit S3 = P3^4; // 按键 S3:避障模式 sbit S4 = P3^2; // 按键 S4:寻光模式 sbit FontIR = P3^7; // 传感器输入 sbit LeftIR = P3^5; sbit RightIR = P3^6; sbit SB1 = P0^6; // 蜂鸣器 uchar IRCOM[7]; // ===== 红外键值表 ===== uchar code RecvData[] = { 0x19, 0x46, 0x15, 0x44, 0x43, // 0:前 1:后 2:左 3:右 4:停 0x40, 0x1C, 0x18, 0x08, 0x0F // 5~9 功能键 }; // ===== 全局变量 ===== uchar irRecvFlag = 0; // 红外接收标志 uchar irCommand = 0; // 红外命令码 // ===== 延时函数 ===== void DelayUs(uint us) { while (us--) { _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); } } void DelayMs(uint ms) { uint i, j; for (i = 0; i < ms; i++) for (j = 0; j < 114; j++); } void delay_ms(unsigned char x) //0.14mS延时程序 { unsigned char i; //定义临时变量 while(x--) //延时时间循环 { for (i = 0; i<13; i++) {} //14mS延时 } } // ===== 蜂鸣器提示 ===== void Beep(uchar cnt) { while (cnt--) { SB1 = 0; DelayMs(50); SB1 = 1; DelayMs(50); } } // ===== 红外命令处理 ===== void IR_ControlCar(unsigned char cmd) { tingzhi(); DelayMs(100); switch (cmd) { case 0: tingzhi();DelayMs(50);currentMode = MODE_REMOTE; P2 = 0x03; Beep(1); break; // 返回遥控 case 1: tingzhi();DelayMs(50);qianjin(); P2 = 0x9F; break; // 前进 case 2: tingzhi();DelayMs(50);houtui(); P2 = 0x25; break; // 后退 case 3: tingzhi();DelayMs(50);zuozhuan(); P2 = 0x0D; break; // 左转 case 4: tingzhi();DelayMs(50);youzhuan(); P2 = 0x99; break; // 右转 case 5: tingzhi(); P2 = 0x03; Beep(1); break; // 停止 case 6: tingzhi();DelayMs(50);currentMode = MODE_TRACK; P2 = 0x41; Beep(2); break; // 循迹 case 7: tingzhi();DelayMs(50);currentMode = MODE_AVOID; P2 = 0x1F; Beep(2); break; // 避障 case 8: tingzhi();DelayMs(50);currentMode = MODE_LIGHT; P2 = 0x01; Beep(2); break; // 寻光 default: break; } } void IR_IN() interrupt 2 using 0 //定义INT2外部中断函数 { unsigned char j,k,N=0; //定义临时接收变量 EX1 = 0; //关闭外部中断,防止再有信到达 delay_ms(15); //延时时间,进行红外消抖 if (IRIN==1) //判断红外信是否消失 { EX1 =1; //外部中断开 return; //返回 } while (!IRIN) //等IR变为高电平,跳过9ms的前导低电平信。 { delay_ms(1); //延时等待 } for (j=0;j<4;j++) // 采集4字节(j=0~3:地址码、地址反码、数据码、数据反码) 采集红外遥控器数据 { for (k=0;k<8;k++) //分次采集8位数据 { while (IRIN) //等 IR 变为低电平,跳过4.5ms的前导高电平信。 { delay_ms(1); //延时等待 } while (!IRIN) //等 IR 变为高电平 { delay_ms(1); //延时等待 } while (IRIN) //计算IR高电平时长 { delay_ms(1); //延时等待 N++; //计数器加加 if (N>=30) //判断计数器累加值 { EX1=1; //打开外部中断功能 return; //返回 } } IRCOM[j]=IRCOM[j] >> 1; //进行数据位移操作并自动补零 if (N>=8) //判断数据长度 { IRCOM[j] = IRCOM[j] | 0x80; //数据最高位补1 } N=0; //清零位数计录器 } } if (IRCOM[2]!=~IRCOM[3]) //判断地址码是否相同 { EX1=1; //打开外部中断 return; //返回 } for(j=0;j<10;j++) //循环进行键码解析 { if(IRCOM[2]==RecvData[j]) //进行键位对应 { IR_ControlCar(j); //数码管显示相应数码 } } EX1 = 1; //外部中断开 } // ===== 系统初始化 ===== void InitSystem() { // 中断设置 IT1 = 1; // 下降沿触发 EX1 = 1; // 使能外部中断1 EA = 1; // 开总中断 // 初始化状态 tingzhi(); P2 = 0x03; Beep(1); } // ===== 主函数 ===== void yaokong() { uchar i; InitSystem(); while (1) { // // 通过按键S3\S4切换避障和寻光 // if (S3 == 0) { // 避障模式按钮 // DelayMs(20); // if (S3 == 0) { // currentMode = MODE_AVOID; // ShowPort = LedShowData[7]; // Beep(2); // while (!S3); // 等待释放 // } // } // // if (S4 == 0) { // 寻光模式按钮 // DelayMs(20); // if (S4 == 0) { // currentMode = MODE_LIGHT; // ShowPort = LedShowData[8]; // Beep(2); // while (!S4); // 等待释放 // } // } // 红外命令处理 if (irRecvFlag) { irRecvFlag = 0; Beep(1); DelayMs(50); for (i = 0; i < 10; i++) { if (irCommand == RecvData[i]) { IR_ControlCar(i); break; } } } // 模式执行 switch (currentMode) { case MODE_REMOTE: break; // 遥控模式无需特殊处理 case MODE_TRACK: track(); break; case MODE_AVOID: avoid(); break; case MODE_LIGHT: light(); break; } DelayMs(50); // 主循环延时 } } #ifndef __YAOKONG_H__ #define __YAOKONG_H__ void yaokong(); #endif 这是遥控部分的代码。三部分代码分开烧录都可正确运行,整合到主函数里却不能运行(按下S4,数码管会发生变化,但不能运行相应功能)
10-19
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值