📄 main.c
字号:
#include <iom128.h>
//#include "zimo.h"
#define u8 unsigned char
#define u16 unsigned int
#define u32 unsigned long int
u16 crucial_key = 0xFF ;
u8 pre_key = 0 ;
u8 templet_key = 0 ;
u8 scan = 1 ;
u8 column1 = 0x13 ;
u8 column2 = 0x07 ;
u16 templet_num = 0 ;
u8 templet_num_1 = 0 ;
u8 templet_num_2 = 0 ;
u8 templet_num_3 = 0 ;
u8 valid_templet ;
u8 j ;
u8 control = 0 ;
u8 test = 0 ;
u8 flag_m = 0 ;
u8 p_on , pd3_test[2] ;
u32 pp ;
extern void data_clear() ;
extern void InitUART(u8 baudrate) ;
extern void interface_1() ;
extern void display_line_2() ;
extern void display_line_3() ;
extern void display_line_4() ;
extern u8 scan_final_key() ;
extern void zhiwen_compare(u16 templet_id) ;
extern void lcd_upside_initialization() ;
extern void lcd_downside_initialization() ;
extern void display_number_letter( u8 number, u8 page , u8 column1 , u8 column2 ) ;
/****************************************** xian_shi *********************************************/
void xian_shi()
{
lcd_upside_initialization() ;
//data_clear() ;
if(crucial_key==1|crucial_key==2|crucial_key==3|crucial_key==4|crucial_key==5|crucial_key==6|crucial_key==7|crucial_key==8|crucial_key==9|crucial_key==0)
{
if(column2==0x0F)
{
display_number_letter( crucial_key , 0xB0 , column1 , column2 ) ;
column1 = column1 + 1 ;
column2 = 0x07 ;
}
else
{
display_number_letter( crucial_key , 0xB0 , column1 , column2 ) ;
column2 = column2 + 0x08 ;
}
}
}
/******************************* power_on_initialization *****************************/
void power_on_initialization()
{
EICRA |= (1<<ISC31) ;
EICRA &= ~(1<<ISC30) ;
EIMSK |= (1<<INT3) ;
SREG |= (1<<7) ;
}
/************************************ power_off ****************************************/
void power_off()
{
ADCSR &=~(1<<ADEN);
lcd_downside_initialization() ;
data_clear() ;
lcd_upside_initialization() ; //clear the lcd
data_clear() ;
DDRB |= ( 1<<PB6 ) ;
PORTB &= ~( 1<<PB6 ) ;
DDRB &= ~( 1<<PB6 ) ;
MCUCR |= ( 1<<SE ) ;
MCUCR &= ~( (1<<SM0)|(1<<SM1)|(1<<SM2) ) ;
asm ("SLEEP") ;
//asm("nop") ;
}
/*********************************** power_interrupt ************************************/
#pragma vector=INT3_vect
__interrupt void power_interrupt()
{
flag_m ^= 1 ;
if( flag_m == 0 )
{
MCUCSR = ( 1<<WDRF ) ;
WDTCR = 0x08 ; //WATCH DOG ENABLE
power_off() ;
}
}
/********************************** power_on_pre_action **********************************/
void power_on_pre_action()
{
lcd_downside_initialization() ;
data_clear() ;
lcd_upside_initialization() ; //clear the lcd
data_clear() ;
while( p_on != 1 )
{
p_on = 1 ;
for( pp=0;(pp<50000)&&(p_on == 1);pp++ )
{
power_on_initialization() ;
DDRD &= ~(1<<PD3) ; //PD3 IN
pd3_test[0] = ( PIND&(1<<PD3) ) ;
if( pd3_test[0] != 0 )
{
p_on = 0 ;
}
else p_on = 1 ;
}
asm("nop") ;
}
p_on = 0 ;
//////
asm("nop") ;
}
/****************************************** main *********************************************/
void main()
{
power_on_pre_action() ;
while(1)
{
flag1: interface_1() ; //Please select templet number
j = 0 ;
scan = 1 ;
column1 = 0x13 ;
column2 = 0x07 ;
while(scan==1)
{
pre_key = scan_final_key() ;
switch(pre_key)
{
case 7 : //press F1
{
lcd_upside_initialization() ;
data_clear() ;
}break;
case 11: {crucial_key = 1 ; xian_shi();} break;
case 12: {crucial_key = 2 ; xian_shi();} break;
case 13: {crucial_key = 3 ; xian_shi();} break;
case 15: {crucial_key = 4 ; xian_shi();} break;
case 16: {crucial_key = 5 ; xian_shi();} break;
case 17: {crucial_key = 6 ; xian_shi();} break;
case 19: {crucial_key = 7 ; xian_shi();} break;
case 20: {crucial_key = 8 ; xian_shi();} break;
case 21: {crucial_key = 9 ; xian_shi();} break;
case 14: {crucial_key = 0 ; xian_shi();} break;
}
j++ ;
switch(j&0x0F)
{
case 2: templet_num_1 = crucial_key ; break ;
case 3: templet_num_2 = crucial_key ; break ;
case 4: templet_num_3 = crucial_key ; break ;
}
asm("nop");
switch(pre_key)
{
case 5: //press OK
{
scan = 0 ;
templet_num = (templet_num_1*100)+templet_num_2*10+templet_num_3;
}break ;
}
}//end of while(scan==1)
InitUART(47) ; // baudrate 9600
lcd_upside_initialization() ;
data_clear() ;
display_line_3() ; //display "Please press your thumb"
InitUART(47) ;
zhiwen_compare(templet_num) ;
while(templet_key != 1) //press R
{
templet_key = scan_final_key() ;
}
templet_key = 0 ;
goto flag1 ;
}//end of while(1)
}//end of main
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -