马老师的程序错了
简单电话拨号键盘的设计一、
void main(void)
{
char i, key_temp;
PORTA = 0x00; // 显示控制I/O端口初始化
DDRA = 0xFF;
..............
........
#define No_key 255
#define K1_1 1
以上程序段中的 key_temp为字符型,程序默认为在+128~-128之间,与
#defineNo_key 255不可比
二、
if (key_temp != No_key) //不可比较
{/
for (i=0; i<7; i++)
{dis_buff = dis_buff;} // LED显示左移一位
dis_buff = key_temp; // 最右显示新按下键的键值
}
for循环顺序颠倒了!!数据会依次覆盖!!! 谢谢你提出问题。
第1个问题按标准C的语法,你说的完全对的。
在CVAVR环境中,有一个缺省的设置就是 char 代表了 unsigned char。
因此,我在CVAVR中编写调试程序的过程中就偷懒了,不写unsigned。讲义中直接帖上的程序,所以也没有unsigned。
但作为一本书的话,应该使用标准用法,因为在其它的C环境中没有这样的设置,如果简单就这样抄代码的话就会出问题了。
最近在忙着整理讲义准备出版(快脱稿了),实际上在整理过程中,我已经将unsigned全部补上了,只是你看到的5月份稿子还是原来的样子。
不过还是要谢谢你。
你提的第2个问题我没发现错误。
0被1覆盖,1被2覆盖......6被7覆盖,7放最新的键值,整个显示左移一位,应该正确。
页:
[1]