fengchangyong 发表于 2007-8-4 19:22:31

马老师的程序错了

简单电话拨号键盘的设计



一、

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循环顺序颠倒了!!数据会依次覆盖!!!

machao 发表于 2007-8-5 00:00:10

谢谢你提出问题。



第1个问题按标准C的语法,你说的完全对的。



在CVAVR环境中,有一个缺省的设置就是 char 代表了 unsigned char。



因此,我在CVAVR中编写调试程序的过程中就偷懒了,不写unsigned。讲义中直接帖上的程序,所以也没有unsigned。



但作为一本书的话,应该使用标准用法,因为在其它的C环境中没有这样的设置,如果简单就这样抄代码的话就会出问题了。



最近在忙着整理讲义准备出版(快脱稿了),实际上在整理过程中,我已经将unsigned全部补上了,只是你看到的5月份稿子还是原来的样子。



不过还是要谢谢你。



你提的第2个问题我没发现错误。

0被1覆盖,1被2覆盖......6被7覆盖,7放最新的键值,整个显示左移一位,应该正确。
页: [1]
查看完整版本: 马老师的程序错了