嵌入式C语言查表法的项目应用

嵌入式C实战项目开发技巧:如果对一个有规律的数组表进行位移操作

就像下面的这个表

之前写过上面这个标题的一篇文章,讲的是以位移的方式去遍历表中的数据,效率非常高,但是,如果要实现一个乱序的流水灯或者跑马灯的话,思考一个这样的算法是不可取的,很费时间,也很费脑力,于是,今天就说一说查表法,如果在程序中运用查表法,不论多么复杂的程序,只要符合一张表,那都可以实现,非常简单,体力活而已,接下来看看下面这个程序,对上面这个进行操作吧。

#include <stdio.h>
#include <windows.h>
//这里的行可以自由写,这样就不受限制,想做出什么样的效果都可以。
int array[][10] =  {

	0x03,0x00,0x00,0x00,0x00,//第一列
	0x00,0x02,0x00,0x00,0x00,

	0x0C,0x00,0x00,0x00,0x00,//第二列
	0x00,0x04,0x00,0x00,0x00,

	0x10,0x00,0x00,0x00,0x00,//第三列
	0x00,0x08,0x00,0x00,0x00,

	0x60,0x00,0x00,0x00,0x00,//第四列
	0x00,0x10,0x00,0x00,0x00,

	0x80,0x01,0x00,0x00,0x00,//第五列
	0x00,0x20,0x00,0x00,0x00,

	0xAA,0x55,0x00,0x00,0xC0,//end
	0x00,0x00,0x00,0x00,0x00,

};

void to_Q112_cmd_designator_LED(int *array)
{
	int i;
	for(i = 0; i < 10; i++)
	{
		printf(" %3d ", *(array+i));
	}
	printf("\n");
}

void delay_500ms(void)
{
	Sleep(500);
}

int main(void)
{
	int i,j;
	int tick;
	int count = 0;
	while(array[count][0] != 0xAA || array[count][1] != 0x55)//如果当数组第count行第0列等于0xAA,或者第count行第1列等于0x55时,那么就退出,否则就循环执行遍历数据 
	{
		to_Q112_cmd_designator_LED((int *)(&array[0][0]+count*10) );//以首元素每次向后偏移10个字节
		delay_500ms();

		count++;
	}

	return 0;
}

运行结果:

3    0    0    0    0    0    2    0    0    0
  12    0    0    0    0    0    4    0    0    0
  16    0    0    0    0    0    8    0    0    0
  96    0    0    0    0    0   16    0    0    0
 128    1    0    0    0    0   32    0    0    0

时间: 2024-10-04 05:18:26

嵌入式C语言查表法的项目应用的相关文章

C语言:十进制进制转换为其他进制(思想:查表法)

// //  main.c //  Hex conversion // //  Created by ma c on 15/7/22. //  Copyright (c) 2015年 bjsxt. All rights reserved. //  要求:十进制向任意进制之间的转换(查表法). #include <stdio.h> //十六进制的转换 void ToHex(int num) { int temp; char chs[8];//定义一个临时容器,长度为8,8X4=32位比特 int

模糊PID控温算法的具体实现(二):MSP430F5438A怎么实现查表法

工程上要实现参数自整定模糊PID算法,最常采用的方法是查表法.具体实现方法是将不同的E(温度误差),EC(误差变化率)与 △Kp, △Ki , △Kd的规则制成一张表格存储在单片机内部.那么在每一采样得到的温度数据模糊化得到E和Ec后,便可以通过查表从而得到相应的△Kp,△Ki和△Kd了.这个表类似于下面的形式: 那么怎么在MSP430F5438A中插入这种类似的表呢,是插在Flash里面还是SRAM里面呢?

十进制转换成其它进制的通用写法(查表法)

 //十进制转换成其它进制的通用写法(查表法)  class Transform  { public static void main(String[] args) {    toHex3(60);    System.out.println();    toOctal2(20);    System.out.println();    toBinary2(6); }  public static void toAny(int num,int base,int offSet)  {   char

CRC16 查表法

1 static const unsigned short crc16_table[256]= 2 { 3 0x0000, 0xC0C1, 0xC181, 0x0140, 0xC301, 0x03C0, 0x0280, 0xC241, 4 0xC601, 0x06C0, 0x0780, 0xC741, 0x0500, 0xC5C1, 0xC481, 0x0440, 5 0xCC01, 0x0CC0, 0x0D80, 0xCD41, 0x0F00, 0xCFC1, 0xCE81, 0x0E40,

Qt 5.3 下OpenCV 2.4.11 开发(8)查表法直方图修改图像

接着上节内容,本节添加两个方法 stretch() 方法和 applyLookUp() 方法.第一个方法用于拉伸直方图的准备工作,即排除直方图中没有像素值存在的项:第二个方法用查表法拉伸图像.现在贴出完整代码,Histogram1D.h 代码段如下: #ifndef HISTOGRAM1D_H #define HISTOGRAM1D_H #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #

YUV420查表法高效、无失真的转换为RGB32格式

YUV格式有两大类:planar和packed.planar的YUV格式,先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V,这里所讲述的就是这中存储格式的:packed的YUV格式,每个像素点的Y,U,V是连续交叉存储的. 色彩空间转换主要有三种方法,1.整点运算,即通过公式对每个点进行计算,速度超慢,基本只有在PC下才能够运行:2.查表法,即由由YUV直接查表得到对应的RGB值:3.通过汇编指令,可参考http://blog.csdn.net/alien75/artic

用MATLB仿真一个单闭环控制量,同时还存在两个开环控制变量的阶跃响应曲线。(自动控制方法是PID中的P控制。通过查表法直接给开环参数稳态最佳的大小)

实际项目背景:甘肃省,航天510所的LIPS100电推力器.一共有三个控制变量,开环控制变量是:Ia(阳极电流).mmrf(阳极主流率) 这个阳极主流率是阀门变量,不能够突变,模拟用(大学一年级课,电路分析基础中)类似电感放电的e指数公式. 要求:比例控制参数P可调,阶跃响应在通电前设定幅值3.5~12.8 假设仿真实验时长120S,在第60S时给定阶跃控制信号. 把查表用的TXT文件放到MATLAB当前文件夹路径.fDemandToIa.txt和subBestSchedule_2.txt MA

进制转换(查表法)

import java.util.*;public class Demo513{ public static void main(String []args) { toHex_2(60); } public static void toHex_2(int num) { char []chs={'0','1','2','3', '4','5','6','7', '8','9','A','B', 'C','D','E','F'}; char []arr=new char[8]; int pos=ar

三角函数查表法和三角函数值数组生成方法

今天打算用STM32驱动TFTLCD屏显示显示一个画扇形的程序,这样就需要我们有一个画圆弧的程序,我尝试了很多方法,其中有一种方法就是使用三角函数来确定圆弧的点的坐标,即: x=radius*cos(angle); y=radius*sin(angle); 下面是当时的计算过程:我们先把角度变成弧度,我们在这里使用了ToRad()函数来实现,程序十分简单. #include <math.h> #define pi 3.141592653f int shu; float ToRad(float