📄 wangled.c
字号:
/*键盘为2行8列,PC0和PC1作为键盘的行线,PA0~PA7作为键盘的列线
显示部分用4个7段LED数码管,PB口和PD口通过4个74LS47对数码管进行控制*/
#include <iom16v.h>
#include <macros.h>
#include <math.h>
/**********************************************/
#define pc0_high() asm("sbi 0x15,0")
#define pc0_low() asm("cbi 0x15,0")
#define pc1_high() asm("sbi 0x15,1")
#define pc1_low() asm("cbi 0x15,1")
unsigned char i;
unsigned char temp2=0x00;
unsigned char temp=0x00;
unsigned char key=0x00;
/*端口初始化
PA口为输入口,内部上拉电阻有效,PB口和PD口均作为输出口,并输出高电平,
PC0和PC1为输出口,PC口的其它为输入口并且上拉有效*/
//微秒延时程序
void delay_us(int time)
{
do
{
time--;
}
while(time>1);
}
//毫秒延时程序
void delay_ms(unsigned int time)
{
while(time!=0)
{
delay_us(1000);
time--;
}
}
void port_init(void)
{
unsigned char x=0x00,y=0x00;
DDRA=0x00;
PORTA=0xff;
DDRC=0x03;
PORTC=0xff;
DDRB=0xff;
PORTB=0xff;
DDRD=0xff;
PORTD=0xff;
}
//动态显示
void display(unsigned char key1)
{
unsigned char x=0x00,y=0x00,z=0x00;
x=key1/10;
y=key1-x*10;
z=x*16+y;
PORTD=z;
}
//系统初始化***************************************
void init_devices(void)
{
CLI(); //关中断
port_init();
}
//主函数********************************************
void main(void)
{
init_devices();
while(1)
{
for(i=0;i<2;i++)
{
unsigned char temp1;
PORTC=~(1<<i); //PORTC的i位为零,使行线为低电平
delay_ms(10);
temp=PINA; //读PINA的值
if(temp!=0xff) //有键按下吗
{
delay_ms(20); //延时,去抖
temp1=PINA; //再次读PINA的值
if(temp==temp1) //有键按下吗
{
switch(temp) //计算键值
{
case 0x7f:temp=(i*8)+1;break;
case 0xbf:temp=(i*8)+2;break;
case 0xdf:temp=(i*8)+3;break;
case 0xef:temp=(i*8)+4;break;
case 0xf7:temp=(i*8)+5;break;
case 0xfb:temp=(i*8)+6;break;
case 0xfd:temp=(i*8)+7;break;
case 0xfe:temp=(i*8)+8;break;
default:;
}
key=temp;
}
else ;
}
else ;
}
display(key);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -