作者ruemann (此人挂网中……)
看板ASM
标题Re: [问题] RS232与8051
时间Mon Aug 4 20:00:22 2008
※ 引述《aegishow (clover)》之铭言:
: 我想问一些关於编码的问题,以下是部分程式码
: unsigned char code seg7[]={0xc0,0xf9,0xa4
: ,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
: code char mes[]="$LGIN,275,34,5" ; //自己设的字串资料
: 我想要显示自己设的字串资料中的34,也就是第二个逗号跟第三个逗号中间的数字
: 我是利用电脑送出这个字串
: L=第三个逗号的位置(13)
: SBUF=mes[L-1]; //我用SBUF读到的是4也就是34H
: 我用7段显示器接P0
: P0=seg7[mes[L-1]+1] //为什麽显示出来不是数字4呢?? 结果不是数字
mes[L-1] = '4'
mes[L-1]+1 = '4' + 1 = '5' = 35H
P0 = seg7[mes[L-1]+1] = seg7[35H] = ???
正确的做法应该是:
P0 = seg7[ mes[L-1] - 30H ];
这样就好了……没事再加一是做啥呢?
请记住一个很重要的观念:4 和 '4' 和 "4" 是完全不同的东西
: 我直接放数字上去,也就是
: P0=seg7[5] //却可以显示出数字4
因为那个数字就是4
: SBUF读到的数字4是经过转码了吗? 所以我看到的数字并不是原始的资料吗?
你看到的数字就是 UART 所读到的数字
: 要怎麽把SBUF读到的资料转成数字呢?
不用转,因为你在传送字串时,已经转成 ASCII 了
: 该不会要自己建一个对照表吧?
某个程度上会需要建立 ASCII -> 数字 的表格
不过因为你只想显示数字 0~9,所以SBUF读进来的资料只要 -30H 就可以了
所以其实也不用建对照表
再想想吧……有很多事情你把它搞混了
这个已经离组语很远了……
--
只要觉得有生命危险,就马上四散逃走……
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 219.87.156.98
1F:推 aegishow:茅塞顿开 08/05 09:04
2F:→ aegishow:话说30H不能用,要用0x30机器才看的懂XD 08/05 09:19