?? atmega8.c
字號:
/*********************************************/
/* Design target: ATMEGA8 */
/* Author: joanhn */
/* Mail: joanhn789@vip.sina.com */
/* Mail2: joanhn@163.com QQ: 19321364 */
/* Phone: 0379-68282215 Mobile:13526945688 */
/*********************************************/
#include <iom8v.h>
#include <macros.h>
#include <general.h>
#define byte unsigned char
#define word unsigned int
//define the macro of the bit operation//
#define set_bit(byteadd,bitadd) (byteadd|=(1<<bitadd))
#define clr_bit(byteadd,bitadd) (byteadd&=~(1<<bitadd))
#define get_bit(byteadd,bitadd) (byteadd&(1<<bitadd))
//modify the list parameter while exchanging device//
#define key_l0 2
#define key_l1 3
#define key_read_row(dat) (dat=PINC&(0x0f))
#define key_line_output() (DDRD=(1<<key_l0)|(1<<key_l1))
#define key_row_input() {DDRC&=0xf0;PORTC=(1<<0)|(1<<1)|(1<<2)|(1<<3);}
#define key_l0_clr() (PORTD&=~(1<<key_l0))
#define key_l0_set() (PORTD|=(1<<key_l0))
#define key_l1_clr() (PORTD&=~(1<<key_l1))
#define key_l1_set() (PORTD|=(1<<key_l1))
#define key_4x4_line_output() {DDRD|=0xf0;PORTD&=0x0f;}
#define key_4x4_line_input() {DDRD&=0x0f;PORTD|=0xf0;}
#define key_4x4_row_output() {DDRB|=0x0f;PORTB&=0xf0;}
#define key_4x4_row_input() {DDRB&=0xf0;PORTB|=0x0f;}
#define key_4x4_get_line(dat) (dat=PIND&(0xf0))
#define key_4x4_get_row(dat) (dat=PINB&(0x0f))
const byte keytab[]={0x7e,0x7d,0x7b,0x77,0xbe,0xbd,0xbb,0xb7,0xde,0xdd,0xdb,0xd7,0xee,0xed,0xeb,0xe7};
/*********Delay 10us FOSC=12M*********/
void delay_us(byte time)
{
byte i;
while(time--) for(i=28;i;i--) ;
}
void DelayMs(byte number)
{
byte temp;
for(;number;number--)
{
for(temp=250;temp;temp--) ;
}
}
void delay_ms(byte number)
{
byte temp,cnt8;
for(;number;number--)
for(temp=250;temp;temp--)
for(cnt8=8;cnt8;cnt8--) ;
}
void key_init_2x4(void)
{
key_line_output();
key_row_input();
key_l0_clr();
key_l1_clr();
}
void key_init_4x4(void)
{
key_4x4_row_output();
key_4x4_line_input();
}
byte key_scan_2x4(void)
{
byte ktmp,key;
key=0;
key_l0_clr();
key_l1_clr();
delay_ms(10);
key_read_row(ktmp);
while(ktmp==0x0f) key_read_row(ktmp);
key_read_row(ktmp);
if(ktmp!=0x0f)
{
delay_ms(100);
key_read_row(ktmp);
if(ktmp!=0x0f)
{
key_l0_clr();
key_l1_set();
delay_ms(15);
key_read_row(ktmp);
key=ktmp;
key_l0_set();
key_l1_clr();
delay_ms(15);
key_read_row(ktmp);
key|=(ktmp<<4);
key_l0_clr();
key_l1_clr();
delay_ms(15);
key_read_row(ktmp);
}
}
return(key);
}
byte key_scan_4x4(void)
{
byte ktmp,key;
key=0;
key_4x4_line_output();
key_4x4_row_input();
key_4x4_get_row(ktmp);
while((ktmp&0x0f)==0x0f) key_4x4_get_row(ktmp);
delay_ms(10);
key_4x4_get_row(ktmp);
if((ktmp&0x0f)!=0x0f)
{
key=(ktmp&0x0f);
key_4x4_row_output();
key_4x4_line_input();
delay_ms(10);
key_4x4_get_line(ktmp);
if((ktmp&0xf0)!=0xf0)
{
key+=(ktmp&0xf0);
while((ktmp&0xf0)==0xf0) key_4x4_get_line(ktmp);
key_4x4_line_output();
key_4x4_row_input();
for(ktmp=0;ktmp<16;ktmp++)
{
if(key==keytab[ktmp]) return(ktmp);
}
return(0xff);
}
else return(0xff);
}
else return(0xff);
}
void hex2compressbcd(word dat,byte * decimal_dat)
{
*decimal_dat=dat/10000+0x30;
*(decimal_dat+1)=(dat%10000/1000)+0x30;
*(decimal_dat+2)=(dat%1000/100)+0x30;
*(decimal_dat+3)=(dat%100/10)+0x30;
*(decimal_dat+4)=(dat%10)+0x30;
}
/*
void hex2compressbcd(word dat,byte *dh,byte *dm,byte *dl)
{
*dh=dat/10000;
*dm=dat%10000/1000;
*dm=*dm<<4;
*dm|=(dat%1000/100);
*dl=dat%100/10;
*dl=*dl<<4;
*dl|=dat%10;
}*/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -