试编写一个用查表法查0-9字形段码的子程序,调用子程序前,待查表的数据存放在

试编写一个用查表法查0-9字形段码的子程序,调用子程序前,待查表的数据存放在,第1张

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如何用汇编编写如下一个用查表法的程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9878074.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存