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

📄 main.h

📁 M8+1302+18b20+8位数码管的sch和gcc源程序
💻 H
字号:
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <avr/signal.h> 
#include <avr/eeprom.h>
#include <avr/delay.h>

#define uchar 	unsigned char
#define uint  	unsigned int

#define hc595_ser	PB2
#define hc595_srclk	PB1
#define	hc595_rclk	PB0
#define set_hc595_ser_ddr()		DDRB|=1<<hc595_ser
#define set_hc595_ser()			PORTB|=1<<hc595_ser
#define clr_hc595_ser()			PORTB&=~(1<<hc595_ser)
#define set_hc595_srclk_ddr()	DDRB|=1<<hc595_srclk
#define set_hc595_srclk()		PORTB|=1<<hc595_srclk
#define clr_hc595_srclk()		PORTB&=~(1<<hc595_srclk)
#define set_hc595_rclk_ddr()	DDRB|=1<<hc595_rclk
#define set_hc595_rclk()		PORTB|=1<<hc595_rclk
#define clr_hc595_rclk()		PORTB&=~(1<<hc595_rclk)

#define ds1302_rst	PC0
#define ds1302_io	PC1
#define ds1302_sclk	PC2
#define set_ds1302_rst_ddr()	DDRC|=1<<ds1302_rst
#define set_ds1302_rst()		PORTC|=1<<ds1302_rst
#define clr_ds1302_rst()		PORTC&=~(1<<ds1302_rst)
#define set_ds1302_io_ddr()		DDRC|=1<<ds1302_io
#define set_ds1302_io()			PORTC|=1<<ds1302_io
#define clr_ds1302_io()			PORTC&=~(1<<ds1302_io)
#define clr_ds1302_io_ddr()		DDRC&=~(1<<ds1302_io)
#define in_ds1302_io()			PINC&(1<<ds1302_io)
#define set_ds1302_sclk_ddr()	DDRC|=1<<ds1302_sclk
#define set_ds1302_sclk()		PORTC|=1<<ds1302_sclk
#define clr_ds1302_sclk()		PORTC&=~(1<<ds1302_sclk)

#define ds1302_sec_reg		0x80
#define ds1302_min_reg		0x82
#define ds1302_hr_reg		0x84
#define ds1302_date_reg		0x86
#define ds1302_month_reg	0x88
#define ds1302_day_reg		0x8a
#define ds1302_year_reg		0x8c
#define ds1302_control_reg	0x8e
#define ds1302_charger_reg	0x90
#define ds1302_clkburst_reg	0xbe

#define buzzer		PC4
#define set_buzzer_ddr()	DDRC|=1<<buzzer
#define set_buzzer()		PORTC|=1<<buzzer
#define clr_buzzer()		PORTC&=~(1<<buzzer)
#define flash_buzzer()		PORTC^=1<<buzzer

#define ds18b20_dq				PC5
#define set_ds18b20_dq_ddr()	DDRC|=1<<ds18b20_dq
#define set_ds18b20_dq()		PORTC|=1<<ds18b20_dq
#define clr_ds18b20_dq()		PORTC&=~(1<<ds18b20_dq)
#define clr_ds18b20_dq_ddr()	DDRC&=~(1<<ds18b20_dq)
#define in_ds18b20_dq()			PINC&(1<<ds18b20_dq)

#define ds18b20_read_rom           0x33
#define ds18b20_match_rom          0x55
#define ds18b20_skip_rom           0xcc
#define ds18b20_search_rom         0xf0
#define ds18b20_alarm_search_rom   0xec
#define ds18b20_write_ram          0x4e
#define ds18b20_read_ram           0xbe
#define ds18b20_copy_ram           0x48
#define ds18b20_convert_tem        0x44
#define ds18b20_eecall_eeprom      0xb8
#define ds18b20_read_power_supply  0xb4

#define set_time			PIND0
#define set_timer			PIND1
#define	shift				PIND2
#define add					PIND3
#define ok					PIND4
#define look_date			PIND5
#define look_temperature	PIND6
#define	look_timer			PIND7
#define clr_key_ddr()		DDRD=0
#define set_key()			PORTD=0xff
#define in_key()			PIND
#define in_set_time()		PIND&(1<<set_time)
#define in_set_timer()		PIND&(1<<set_timer)
#define in_shift()			PIND&(1<<shift)
#define in_add()			PIND&(1<<add)
#define in_ok()				PIND&(1<<ok)
#define in_look_date()		PIND&(1<<look_date)
#define in_look_temperature()	PIND&(1<<look_temperature)
#define in_look_timer()		PIND&(1<<look_timer)

#define t0_tcnt	0xf7	//t0定时1ms
#define t1_tcnt	0xf1ee	//t1定时500ms

//flag
#define hour_flag	0
#define buzzer_flag	1
#define timer0_available	2
#define timer1_available	3
#define timer2_available	4
#define timer3_available	5
#define timer4_available	6
#define timer5_available	7

#define timer0_address	0x0010
#define timer1_address	0x0012
#define timer2_address	0x0014
#define timer3_address	0x0016
#define timer4_address	0x0018
#define timer5_address	0x001a
//main
#ifdef main_c
	uchar second_flag=0;
	uchar year=0;
	uchar month=0;
	uchar day=0;
	uchar week=0;
	uchar hour=0;
	uchar minute=0;
	uchar second=0;
	uchar half_second=0;
	uchar display_buffer[8]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07};
	uchar display_count=0;
	PROGMEM const uchar display_code[10]=
	{
		0x3f,//0
		0x06,//1
		0x5b,//2
		0x4f,//3
		0x66,//4
		0x6d,//5
		0x7d,//6
		0x07,//7
		0x7f,//8
		0x6f,//9
		/*
		0x40,//-
		0x63,//o
		0x39,//c
		0x00,//空
		0x80,//.
		*/
	};
	uchar flag=0;
	uchar flash_control=0;
	uchar flash_var=0;
	uchar timer0_hour=0;
	uchar timer0_minute=0;
	uchar timer1_hour=0;
	uchar timer1_minute=0;
	uchar timer2_hour=0;
	uchar timer2_minute=0;
	uchar timer3_hour=0;
	uchar timer3_minute=0;
	uchar timer4_hour=0;
	uchar timer4_minute=0;
	uchar timer5_hour=0;
	uchar timer5_minute=0;
	
	uchar temperature_low=0;
	uchar temperature_high=0;
#else
	extern uchar second_flag;
	extern uchar year;
	extern uchar month;
	extern uchar day;
	extern uchar week;
	extern uchar hour;
	extern uchar minute;
	extern uchar second;
	extern uchar half_second;
	extern uchar display_buffer[8];
	extern uchar display_count;
	extern PROGMEM const uchar display_code[10];
	extern uchar flag;
	extern uchar flash_control;
	extern uchar flash_var;
	extern uchar timer0_hour;
	extern uchar timer0_minute;	
	extern uchar timer1_hour;
	extern uchar timer1_minute;
	extern uchar timer2_hour;
	extern uchar timer2_minute;
	extern uchar timer3_hour;
	extern uchar timer3_minute;
	extern uchar timer4_hour;
	extern uchar timer4_minute;
	extern uchar timer5_hour;
	extern uchar timer5_minute;
	
	extern uchar temperature_low;
	extern uchar temperature_high;
#endif

//ds1302
#ifdef ds1302_c
	void ds1302_write(uchar reg,uchar data);
	void ds1302_write_time(void);
	uchar ds1302_read(uchar reg);
	void ds1302_read_time(void);
	void display_time(void);
	void display_date(void);
	void display_year(void);
	uchar check_ds1302(void);
	void check_timer(void);
	void display_timer(uchar number,uchar timer_hour,uchar timer_minute);
#else
	extern void ds1302_write(uchar reg,uchar data);
	extern	void ds1302_write_time(void);
	extern uchar ds1302_read(uchar reg);
	extern void ds1302_read_time(void);
	extern void display_time(void);
	extern void display_date(void);
	extern void display_year(void);
	extern uchar check_ds1302(void);
	extern void check_timer(void);
	extern void display_timer(uchar number,uchar timer_hour,uchar timer_minute);
#endif

//ds18b20
#ifdef ds18b20_c
	void display_temperature(void);
	void reset_ds18b20(void);
	uchar read_ds18b20(void);
	void write_ds18b20(uchar data);
	void read_temperature(void);
	void ack_ds18b20(void);
	void convert_ds18b20(void);
#else
	extern void display_temperature(void);
	extern void reset_ds18b20(void);
	extern uchar read_ds18b20(void);
	extern void write_ds18b20(uchar data);
	extern void read_temperature(void);
	extern void ack_ds18b20(void);
	extern void convert_ds18b20(void);
#endif

//key
#ifdef key_c
	void key_scan(void);
	void key_delay(void);
#else
	extern void key_scan(void);
	extern void key_delay(void);
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -