char code s7[10]={};//数组里为 0-9 的七段码数据,这个数组存放在代码段(ROM)里
char show(char m) // m=0,1,9
{ return s7(m); }
main()
{ char h, p ;
while(1){
h=8; //调用时
p=show(h);// 对应(8)的七段码数据提取到 p;
}
}
查表法,就是将你的一些固定的数据存储到程序存储器中,当你的程序中需要这些数据时,movc指令读取这些数据。举例假设你的系统要用数码管显示0-9这10个数字,而假设这10个数字各自的断码(点亮时io口相应的电平)分别为\x0d\0xC0,//"0"\x0d\0xF9,//"1"\x0d\0xA4,//"2"\x0d\0xB0,//"3"\x0d\0x99,//"4"\x0d\0x92,//"5"\x0d\0x82,//"6"\x0d\0xF8,//"7"\x0d\0x80,//"8"\x0d\0x90,//"9"\x0d\你有两种方法存储这时个数据,一种是在数据区用十个字节存储这些数据(数据常量),但这会占用你的数据存储器空间。另外一种方法就是把这些不变的数放到程序空间中,到需要的时候到程序空间中读取,这便是查表。也就是在程序空间中建立一个表,假设你需要就9这个数值的断码,就去表中查看一下9对应的数据。
;
RL A
MOV B, A
MOV DPTR, #TAB
MOVC A, @A + DPTR
MOV R7, A
MOV A, B
INC A
MOVC A, @A + DPTR
MOV R6, A
RET
TAB:
DW 0, 1, 4, 9, 16, 25, 36, 49, , 400 ; 平方数据表,楼主自己补全吧。
END
根据一个变量的大小,到一片顺序排列的数据中,找出与其对应的一个,就是查表。
例子如下:
;-----------------------
DIS_ALL: ;共阳数码管, P0:段, P2:反相位
MOV R2, #254 ;位选, 低电平有效
MOV R0, #D_BUF
MOV A, @R0
ADD A, #(TAB - $ - 3)
MOVC A, @A + PC ;查表指令
MOV P2, #255
MOV P0, A
MOV P2, R2
DJNZ R7, $ ;显示1ms
DJNZ R7, $
MOV A, R2
RL A
MOV R2, A
INC R0
CJNE R0, #D_BUF + 6, $ - 19 ;显示6位
MOV P2, #255
RET ;占用时间约为62ms
;-----------------------
TAB: ;码表
DB 0C0H, 0F9H, 0A4H, 0B0H, 099H, 092H, 082H, 0F8H;0~7
DB 080H, 090H, 088H, 083H, 0C6H, 0A1H, 086H, 08EH;8~F
DB 040H, 079H, 024H, 030H, 019H, 012H, 002H, 078H
DB 000H, 010H, 0FFH ;0~9 ' '
DB 08CH, 0BFH, 089H, 0C7H, 0A3H, 0AFH ;P,-,H,L,o,r
;=================================
参考:
>
非常麻烦,只能自己输入一个元素符号的字符串数组,然后通过查表的方式才行。譬如:
#include <stdioh>
char PeriodicTable[][4]=
{
"H",
"He",
"Li",
// 此处省略113条,
};
int main()
{
int Seq;
scanf(“%d”,&Seq);
if(Seq>0 && Seq<= sizeof(PeriodicTable)/sizeof(PeriodicTable[0]))
{
printf("%s\n",PeriodicTable[Seq-1]);
}
else
{
printf("No such Element!\n");
}
return 0;
}
以上就是关于试编写一个用查表法查0-9字形段码的子程序,调用子程序前,待查表的数据存放在全部的内容,包括:试编写一个用查表法查0-9字形段码的子程序,调用子程序前,待查表的数据存放在、51单片机的查表法的原理是什么、keil如何用汇编编写如下一个用查表法的程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)