mengyalei 发表于 2010-3-17 23:35:06

《深入浅出AVR》实例6矩阵按键问题

请问傻孩子:
          深入浅出AVR》实例6矩阵按键中, 6个按键按下7段数码管显示ABCDEF
#define Key_A 0x0A
#define Key_B 0x0B
#define Key_C 0x0C
#define Key_D 0x0D
#define Key_E 0x0E
#define Key_F 0x0F
#define NoKey 0x00
这样能显示ABCDEF吗?
我是初学者,买了你的书,很不错。请以后多多指点。

Gorgon_Meducer 发表于 2010-3-18 09:24:52

能显示什么,取决于你的段码表里面有没有对应的内容。

比如你定义Key_A 0x0A,那么,这里0x0A实际上表示一个十进制数字10,也就是说
你的段码表(数组)在下标为10的位置应该存储着“A”的段码,这样才能完成你说
的功能。

mengyalei 发表于 2010-3-18 17:55:50

谢谢!我明白了,还以为是用0x0A十六进制,来对应数码管的段。
我看了几本书,好像他们表示段码时都是最低位对应a段,和最高位对应a段应该都一样吧!

Gorgon_Meducer 发表于 2010-3-18 18:00:40

不明白的意思……

mengyalei 发表于 2010-3-19 21:16:28

那个我搞明白了。
我想问一下书中67页下面那段话什么意思?1MHZ的CPU时钟下,一个NOP是延时1MS吗?
那我用的4MHZ晶振呢?

Gorgon_Meducer 发表于 2010-3-19 21:18:26

1Mhz CPU时钟下,一个NOP是1us……
4Mhz就是 1/4us

nMhz就是 1/Nus……

你也可以这样记忆
nM就是1us可以执行 n个指令……
      1ms可以执行 n 千个指令

mengyalei 发表于 2010-3-20 11:52:58

很多例子都是这个延时程序:应该就是1MHZ下的吧?
void delay_1us(void)               //1us延时函数
{
   asm("nop");
}

void delay_nus(unsigned int n)       //N us延时函数
{
   unsigned int i=0;
   for (i=0;i<n;i++)
   delay_1us();
}
   
void delay_1ms(void)               //1ms延时函数
{
   unsigned int i;
   for (i=0;i<1140;i++);
}
   
void delay_nms(unsigned int n)       //N ms延时函数
{
   unsigned int i=0;
   for (i=0;i<n;i++)
   delay_1ms();
}
我的4MHZ:
void delay_1us(void)               //1us延时函数
{
   asm("nop"); //0.25us
   asm("nop"); //0.25us
   asm("nop"); //0.25us
   asm("nop"); //0.25us

}
下面这个还没搞懂:
void delay_1ms(void)               //1ms延时函数
{
   unsigned int i;
   for (i=0;i<1140;i++);
}
页: [1]
查看完整版本: 《深入浅出AVR》实例6矩阵按键问题