1 #include "reg52.h"

2 //------------------------------------------------------------------------------------

3 // 定义差距输入常量

4 #define GAP_ZERO 0x00

5 #define GAP_VSMALL 0x01

6 #define GAP_SMALL 0x02

7 #define GAP_MEDIUM 0x03

8 #define GAP_BIG 0x04

9 // 定义控制输出常量

10 #define TURN_ZERO 0x80

11 #define TURN_VSMALL 0x81

12 #define TURN_SMALL 0x82

13 #define TURN_MEDIUM 0x83

14 #define TURN_BIG 0x84

15 //-------------定义常量----------------------------------------------------------------

16 #define MU_MAX 0XFF //模糊度的最大值为0XFF代表面1

17 #define RULE_TOT 10 //规则数个数

18 #define MF_TOT 5 //成员函数的个数

19 #define IO_NUM 0x07

20 #define LABEL_NUM 0x70

21 #define DEFAULT_VALUE 0x00

22 //----------------定义数据库-----------------------------------------------------------

23 unsigned char code output_memf[MF_TOT]={0, 15, 35, 60, 102};// OUTPUT TURNING NUMBER:

24 // ZERO, VSMALL, SMALL, MEDIUM, BIG

25 // 输入功能函数以点斜式方式存储. 第一维成员函数标号第二维是点斜式数据

26 unsigned char code input_memf[MF_TOT][4]={ //距离功能函数

27 { 0x00, 0x00, 0x00, 0x0d }, // VSLOW

28 { 0x00, 0x0d, 0x14, 0x0d }, // SLOW

29 { 0x1e, 0x0d, 0x32, 0x0d }, // MEDIUM

30 { 0x3C, 0x0d, 0x50, 0x0d }, // FAST

31 { 0x50, 0x09, 0x6e, 0x00 } // VFAST

32 };

33 //-----------定义模糊系统规则-----------------------------------------------------------

34 unsigned char code rules[RULE_TOT]={

35 // if... then...

36 GAP_ZERO,TURN_ZERO,

37 GAP_VSMALL,TURN_VSMALL,

38 GAP_SMALL,TURN_SMALL,

39 GAP_MEDIUM,TURN_MEDIUM,

40 GAP_BIG,TURN_BIG

41 };

42 //-----------定义各变量-----------------------------------------------------------------

43 unsigned char outputs[MF_TOT],fuzzy_out; //模糊输出mu值

44 //-----------子程序函数头申明-----------------------------------------------------------

45 void fuzzy_engine(uchar);

46 uchar compute_memval(uchar,uchar);

47 void defuzzify(void);

48 /***************************************************************************************************************/

49 uchar compute_memval(uchar input,uchar label)

50 {

51 int data temp;

52 if (input < input_memf[label][0])

53 { // 如果输入不在曲线下u值为0

54 return 0;

55 }

56 else

57 {

58 if (input < input_memf[label][2])

59 {

60 temp=input; // 用点斜式计算mu

61 temp-=input_memf[label][0];

62 if (!input_memf[label][1])

63 {

64 temp=MU_MAX;

65 }

66 else

67 {

68 temp*=input_memf[label][1];

69 }

70 if (temp < 0x100)

71 { // 如果结果不超过1

72 return temp; // 返回计算结果

73 }

74 else

75 {

76 return MU_MAX; // 确保mu值在范围内

77 }

78 }

79 else

80 { // 输入落在第二条斜线上

81 temp=input; // 用点斜式方法计算 mu

82 temp-=input_memf[label][2];

83 temp*=input_memf[label][3];

84 temp=MU_MAX-temp;

85 if (temp < 0)

86 { // 确保结果不小于0

87 return 0;

88 }

89 else

90 {

91 return temp; // mu为正 – 返回结果

92 }

93 }

94 }

95 return 0;

96 }

97 /*******************************************************************************

98 Function: defuzzify

99 Description: 计算模糊输出的重心并调用函数把它

100 转换成可被系统使用的输出量

101 Parameters: 无.

102 Returns: 无.

103 Side Effects: outputs[][] 数组被清零.

104 *******************************************************************************/

105 void defuzzify(void)

106 {

107 unsigned long numerator, denominator;

108 unsigned char j;

109 numerator=0; // 恢复总数值

110 denominator=0;

111 for (j=0; j112 { // 计算总和值

113 numerator+=(outputs[j]*output_memf[j]);

114 denominator+=outputs[j];

115 outputs[j]=0; // 清零输出作为参考使用

116 if (denominator)

117 { // 确保分母是0的情况不发生

118 fuzzy_out=numerator/denominator; // 确定 COG

119 }

模糊控制作业c语言,单片机 模糊控制 算法 c语言相关推荐

  1. 函数c语言桶排算法,C语言基本排序算法之桶式排序实例

    本文实例讲述了C语言基本排序算法之桶式排序.分享给大家供大家参考,具体如下: 桶式排序是对一个有n个整型元素的数组a[n],其中对任意i,0 <= a[i] <= m的特殊排序算法. 可以 ...

  2. 静态树表查找算法及C语言实现,数据结构算法C语言实现(三十二)--- 9.1静态查找表...

    一.简述 静态查找表又分为顺序表.有序表.静态树表和索引表.以下只是算法的简单实现及测试,不涉及性能分析. 二.头文件 /** author:zhaoyu date:2016-7-12 */ #inc ...

  3. 用c语言编写银行家算法,C语言实现银行家算法

    <C语言实现银行家算法>由会员分享,可在线阅读,更多相关<C语言实现银行家算法(8页珍藏版)>请在人人文库网上搜索. 1.C语言实现银行家算法(源码.运行结果)一. 源码/* ...

  4. 独立键盘控制风火轮c语言,单片机项目教程--C语言版(十二五)(高职高专)...

    单片机项目教程--C语言版(十二五)(高职高专) 作 者:周坚 编著 出版时间:2013年03月 定 价:26.00 I S B N :9787811247817 所属分类: 大中专教材 &n ...

  5. c语言顺序查找算法,c语言实现排序和查找所有算法

    c语言版排序查找完成,带详细解释,一下看到爽,能直接运行看效果. /* Note:Your choice is C IDE */ #include "stdio.h" #inclu ...

  6. c语言代码先来先服务算法_C语言十大经典排序算法(动态演示+代码,值得收藏)...

    以前也零零碎碎发过一些排序算法,但排版都不太好,又重新整理一次,排序算法是数据结构的重要部分,系统地学习很有必要. 时间.空间复杂度比较 排序算法 平均时间复杂度 最差时间复杂度 空间复杂度 数据对象 ...

  7. c语言实现rle算法,C语言课程设计---RLE压缩算法

    C语言课程设计---RLE压缩算法 RLE算法的介绍 RLE全称(run-length encoding),翻译为游程编码,又译行程长度编码,又称变动长度编码法(run coding),在控制论中对于 ...

  8. 用c语言编写插入排序算法,C语言实现常用排序算法——插入排序

    插入排序是最基础的排序算法,原理: 首先1个元素肯定是有序的,所以插入排序从第二个元素开始遍历: 内循环首先请求一个空间保存待插入元素,从当前元素向数组起始位置反向遍历: 当发现有大于待插入元素的元素 ...

  9. 数字时钟单片机程序c语言,单片机数字时钟C语言程序

    单片机程序 /********************************************************/ #include // 包含51单片机寄存器定义的头文件 unsign ...

最新文章

  1. python学习(三)--跟着例子写的贴吧网页爬取
  2. HBase停止集群报错,pid: No such file or directory
  3. .NET通用基本权限系统
  4. 用python程序编写二元多项式_Python多项式回归的实现方法
  5. 常量的定义与使用 1006 c#
  6. 时间机器(CDQ分治)
  7. 如何部署前端react项目到服务器,Vue、React前端项目打包部署
  8. 吴恩达团队新研究:用X光片识别14种疾病,AI准确度部分超越人类
  9. mysql创建表shop_ShopXO商城-支付方式 - 数据库设计 - 数据库表结构 - 果创云
  10. iOS UIPageControl
  11. 衬线字体与非衬线字体
  12. 凡诺CMS 未授权访问+文件包含Getshell
  13. 如何获取国际短信验证码---创蓝253国际短信接口调用demo
  14. 一个IT小菜鸟的成长之路
  15. debian linux 关闭防火墙,Debian怎么关闭系统自带防火墙命令!
  16. 恭喜 李星鹏 成为 Layotto Committer!
  17. crmeb v4.4.2 修复前端小程序物流查询有部分查询不出来的问题
  18. usercity 小程序_微信小程序API 用户信息 wx.getUserInfo(OBJECT)
  19. ui设计移动端字体适配_移动端UI设计规范
  20. 君正X1830芯片性能和处理器介绍

热门文章

  1. Expert Shell Scripting
  2. 以 vim 的方式来使用 chrome 浏览器(利用 vimium 插件)
  3. best introduction to camera calibration
  4. C# 文件搬运(从一个文件夹Copy至另一个文件夹)
  5. WCF系列(五) -- 也谈序列化(下)
  6. 腾讯地图api如何根据地址获取经纬度
  7. ElasticSearch-安装以及常见错误(自己测试过yum install -y log4j* )
  8. java 语法 冒号_java中生僻的冒号跳转语法
  9. html5金牌榜,member-Grading.html
  10. python 中cookie_使用Python分析Cookies