均查表编程
⑴ 查表指令编程
是汇编语言还是c语言?什么程序啊?
汇编语言的查表很简单
MOV DPTR,#TAB ;数据表格首地址TAB赋值给数据指针作为基址
MOV A,R0 ;把表格索引值R0(R0=0,1,2,3,4,5,6,7,表示表格里第几个数据)送A作为变址
MOVC A,@A+DPTR ;查表格中基址DPTR(即表格首地址)加上变址A(表格里第几个地址)里的和地址里的内容送到A
MOV P1,A ;将A里面查表所得结果送到P1口输出
……
TAB:3FH,06H,5BH,4FH,66H,6DH,7DH,07H,……
3F是表格里第0个数据,06是表格里第1个数据,5B是表格里第2个数据
例如:R0=2,那我们要查的是表格里第2个数据5B,DPTR中的基址是表格中第0个数据3F所在的地址,这个地址+2就是表格中第2个地址查得数据就是5B
⑵ 单片机 查表程序设计
LTB2:
;-------------------下面是R2R3乘以2
MOV A, R3
CLR C
RLC A
MOV R3, A
XCH A, R2
RLC A
XCH R2, A
;------------------下面是表首地址加上R2R3
MOV DPTR, #TAB2
ADD A, DPL ;(R2R3)+(DPTR)→(DPTR)
MOV DPL, A
MOV A, DPH
ADDC A, R2
MOV DPH, A
;------------------下面是查表,查出两个字节
CLR A
MOVC A, @A + DPTR
MOV R2,A
CLR A
INC DPTR
MOVC A, @A + DPTR
MOV R3,A
RET
----
这个程序,是根据两个字节的数据来查表,查出的,也是两个字节。
如果先弄懂了一个字节的查表程序,看这个程序,也就没有什么难的了。
⑶ 单片机查表程序
A+DPTR=4000H+5H=4005H
A+PC=5H+50H=55H
MOV A,@A+DPTR 意思是把4005单元存储的数放到A中,下同。
这条指令是汇编语言专用的查表指令,要查的表是一个顺序表,它以DPTR为表中数据的首地址,A中事先存储数据相对于表首地址的地址偏移量,最大不能超过255,通过调整A值可以查询表中指定位置的数据。这条指令执行完毕后,A中存储的是查询到的数据。简单的说:给DPTR赋表的首地址值,给A数据的偏移量,得到的查询结果放在A中,下同
⑷ 汇编语言编写一简单查表程序
0-9循环显示,经验证完全无误。。谢谢采纳。
ORG 0000H
MOV DPTR,#TAB ;DPTR此时指向0C0H,以后由于A值的不停加1会不停的往后指,在循环
MAIN:MOV R5,#0 ;给初值
MOV A,R5;A=0
LP: MOVC A,@A+DPTR ;查表
MOV P1,A; 显示
MOV A,R5
INC A ;加1
MOV R5,A
LCALL DELAY ;延时
CJNE A,#10,LP ;是否 到9.
SJMP MAIN
DELAY:MOV R3,#255
DEL1: MOV R4,#255
DEL2: NOP
DJNZ R4,DEL2
DJNZ R3,DEL1
RET
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H;共阳字符。0-9。
END 如有疑问,可以HI我。。
⑸ C语言查表
#include<stdio.h>
struct data
{int t;
float m;
};
struct data a[]={{0,29.4},{10,33.3},{20,37.2},{30,41.4},{40,45.8},{50,50.4},{60,55.2},{70,60.2},{80,65.6}};
void main()
{
int n,i;
scanf("%d",&n);
for(i=0;i<9;i++)
if(a[i].t==n)
{printf("%3.1f\n",a[i].m);
break;
}
}
这个简单~
希望对你能有所帮助。
⑹ 【跪求】单片机编程:利用查表发求1~9的平方值
假设数据在R2中,求出平方后,仍然放在R2。
程序如下:
MOV A, R2
MOV DPTR, #TAB
MOVC A, @A+DPTR
MOV R2, A
RET
TAB: DB 0,1,4,9,16,25,36,49,61,81
END
⑺ c语言编写查表的程序
用数组来解决最简单方便,自己参考一下吧
#include <stdio.h>
int main()
{
char ch;
int i,j,BQ;
char * k1[3][4]={
{"0","0.1","0.2-0.3" ,"0.4-0.6"} ,
{"0.1" ,"0.2-0.3","0.4-0.6","0.7-0.9"} ,
{"0.2","0.4-0.6","0.7-0.9","1.0"} ,
};
printf("地下水状态说明:\n");
printf("0-潮湿或点滴状出水\n" );
printf("1-淋雨状或涌流状出水,水压<=0.1MPa或单位出水量<=10L/min\n");
printf("2-淋雨状或涌流状出水,水压>0.1MPa或单位出水量>10L/min\n");
printf("请选择地下水状态[0-2]:");
do {
scanf("%c",&ch );getchar();
} while ( ch > '2' || ch< '0' );
i=ch-'0' ;
printf("请输入BQ值:");
scanf("%d" , &BQ );
if ( BQ > 450 ) j=0 ; //题目中写的有问题,应该是>450,不是451
else if ( BQ > 350 ) j=1 ;
else if ( BQ > 250 ) j=2 ;
else j=3 ;
printf("K1=%s\n" , k1[i][j] );
system("pause");
return 0;
}
⑻ newton 插值计算均差表 matlab程序,怎样能把均查表输出来啊,看看这个matlab程序能不能改改
%保存文件名为New_Int.m
%Newton基本插值公式
%x为向量,全部的插值节点
%y为向量,差值节点处的函数值
%xi为标量,是自变量
%yi为xi出的函数估计值
function yi=New_Int(x,y,xi)
n=length(x);
m=length(y);
if n~=m
error('The lengths of X ang Y must be equal!');
%return;
end
%计算均差表Y
Y=zeros(n);
Y(:,1)=y';
for k=1:n-1
for i=1:n-k
if abs(x(i+k)-x(i))<eps
error('the DATA is error!');
%return;
end
Y(i,k+1)=(Y(i+1,k)-Y(i,k))/(x(i+k)-x(i));
end
end
%计算牛顿插值公式
yi=0;
for i=1:n
z=1;
for k=1:i-1
z=z.*(xi-x(k));
end
yi=yi+Y(1,i).*z;
end
Y
%{
实验用语句
x=1:.25:5;
y=x.^2+3*rand(size(x));
xi=0:0.1:5;
yi=New_Int(x,y,xi);
plot(x,y,xi,yi)
legend('原函数','插值后函数')
%}
按上面语句试试
⑼ sql开发多表查询时的编程方法
视图和直接执行sql语句效率基本相同,当然是指在查询条件不变的情况下。我的理解,查询结果可以理解为一张表,如果经常调用这些表,还嫌每次写语句麻烦,视图就是将有一些编辑好的查询语句固化。想要提高查询效率,还应该在sql语句(包括视图)优化上下功夫