📄 main_ctl.c
字号:
//----------------------------
//FileName =main_ctl.c
//LastDate =20071229...30
//实验板基本功能测试程序
//----------------------------
#include "public.h"
#include "string.h"
#include "delay.h"
#include "serial.h"
#include "mega32_adc.h"
#include "key_switch.h"
#include "wdog.h"
#include "lcd.h"
#include "main_ctl.h"
static void init_all_extern_paras(void);
volatile uchar buff[10];
volatile uint val;
void main(void)
{
_CLI();
SP =CONST_UINT_RAM_END;
init_system();
_SEI();
lcd_gotoxy(1,1);
lcd_print("PRESS ANY KEY...");
lcd_gotoxy(1,2);
lcd_print(" HELLO WORLD! ");
while(judge_read_local_keys() ==CONST_NOT_READ_KEY)
{
switch(st_curr_key.local_key_label)
{
case CONST_KEY_LABEL_MENU:
lcd_gotoxy(1,2);
lcd_print("MENU:SEND ADC0/1");
val =do_adc_one_channel_change(CONST_ADC_CHANNEL_0);
buff[0] =(val >>8) &0xff;
buff[1] =val &0xff;
val =do_adc_one_channel_change(CONST_ADC_CHANNEL_1);
buff[2] =(val >>8) &0xff;
buff[3] =val &0xff;
rs232_send_str((uchar *)&buff, 4);
break;
case CONST_KEY_LABEL_EXIT:
lcd_gotoxy(1,2);
lcd_print("EXIT:SOFT RESET ");
delay_x250ms(6);
soft_reset();
break;
case CONST_KEY_LABEL_UP:
lcd_gotoxy(1,2);
lcd_print("UP:RECV ++ SEND ");
rs232_recv_str((uchar *)buff, 1);
buff[0]++;
rs232_send_str((uchar *)buff, 1);
break;
case CONST_KEY_LABEL_DOWN:
lcd_gotoxy(1,2);
lcd_print("UP:RECV -- SEND ");
rs232_recv_str((uchar *)buff, 1);
buff[0]--;
rs232_send_str((uchar *)buff, 1);
break;
default:
lcd_gotoxy(1,2);
lcd_print("HAS DEFAULT KEYS");
delay_x250ms(6);
break;
}
lcd_gotoxy(1,2);
lcd_print(" ");
};
}
//=============================================================================
//子函数部分
//=============================================================================
//----------------------------------------------
//系统初始化
//输入:
// 无
//输出:
// 无
//----------------------------------------------
void init_system(void)
{
SFIOR &=~BIT(PUD); //PUD=0 使用内部上拉电阻
//1.CPU端口方向和电平
DDRA =BIT(PA3); //PA3=IR_SEND输出外,其余都输入:PA7~4=SW4~1,PA2=IR_RECV,PA1~0=ADC1~0
PORTA =0x00; //PA3=0,其他引脚为高阻输入
DDRB =0xdf; //PB7/6/4=M_CLK/SO/CS,PB3~0=LCD_BL/EN/RW/RS输出,只有PB5=M_SI输入
PORTB =BIT(PB3); //LCD_BL=1,其余输出控制为0,输入为高阻
DDRC =BIT(PC7) |BIT(PC6) |BIT(PC0); //PC7/6=LED2/1,PC0=RST输出,PC0输入,其余时JTAG端口
PORTC =0x00; //输出控制为0,其他引脚为高阻输入
DDRD =0xf2; //PD7~4=LCD_D7~4, PD1=TXD 输出, PD3=WOL,PD2=INT,PD0=RXD 输入
PORTD =0x02; //输出控制TXD=1,其余为0,输入为高阻
//清除各种复位标志;
MCUCSR &=~(BIT(JTRF) |BIT(WDRF) |BIT(BORF) |BIT(EXTRF) |BIT(PORF));
//2.串口设置(检测调试数据)
rs232_init_sets();
UCSRB &=~BIT(UDRIE); //在启动发送的时候再打开!
//3.ADC通道初始化
init_adc_sets();
//4.看门狗
watch_dog_init_sets(WD_1S);
watch_dog_disable();
//5. 液晶的初始化
lcd_init();
lcd_putc(LCD_OP_CMD_CLR_SCREEN);
//10.全局变量的初始化
init_all_extern_paras();
CODE_LED_1_ON;
CODE_LED_2_ON;
delay_x250ms(2);
CODE_LED_1_OFF;
CODE_LED_2_OFF;
}
//..............................................
//全局变量的初始化
//..............................................
static void init_all_extern_paras(void)
{
}
//----------------------------------------------------------------------------
//软复位函数(依靠看门狗实现)
//----------------------------------------------------------------------------
void soft_reset(void)
{
_CLI();
watch_dog_enable();
while(1); //等待看门狗复位
}
//End Of File
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -