⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main_ctl.c

📁 MEGA32L 单片机的按键,LED,LCD等测试例程,ICCAVR编译器
💻 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 + -