AVR 单片机c语音程序问题

来源:百度知道 编辑:UC知道 时间:2024/05/04 09:26:32
#include <iom16v.h>
#include <macros.h>
#define uchar unsigned char
#define uint unsigned int
#pragma data:code
const table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0};
void delay(uint ms)
{
uint i,j;
for(i=0;i<ms;i++)
{
for(j=0;j<1141;j++);
}
}
void show(uchar j,uchar k)
{
PORTA|=BIT(3);
PORTB=table[j];
PORTA&=~BIT(3);

PORTB=0XFF;
PORTB&=~BIT(k);
PORTA|=BIT(4);
PORTA&=~BIT(4);
delay(1);
}

uchar key_press()
{
uchar j;
DDRD|=0X0F;
PORTD|=0X0F;

DDRD&=0XF0;

j=PIND;
j=j&0X0F;//00001111
if(j==0X0F)
{
return 0;
}
else
{
return 1;
}

}

uchar key_scan()
{
uchar key;
delay(10);

DDRD|=0X0F; // 前四位输入,后四位输出
PORTD|=0X0F; //PORTD前四位不变,后四位为'1'.
DDRD&=0XF0; //前四位输入,后四位输入.
j=PIND; //j=xxxx1111或外部值.
j=j&0X0F; //j=0x0f
if(j==0X0F)//判断后四位是否有变化.

应该是在保持前四位不受到影响的情况下,后四位先置'1'后判断是否有值输入.

DDRD|=0X0F 这是按位或操作
PORTD|=0X0F 这个同上
DDRD&=0XF0 这个是按位与操作

按位或:0|0=0;0|1=1;1|1=1
按位与:0&0=0;0&1=0;1&1=1

没用过,