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

📄 main.c

📁 手把手教你单片机
💻 C
字号:
/*
 * check power up times
 * 
 * author:金沙滩--刚哥
 * date:2011.1.9
*/

#include "main.h"
#include "e2prom.h"


code uint8 Ledcode[13]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uint8 Led_n=0;
uint8 Led_buf[6];

POWER_UP Power_up;

void delay(uint16 cnt)
{
    while (cnt--);
}

/*
 * 定时器0初始化
*/
void timer0_init(void)
{
    TMOD = 0x01;
    TH0 = 0xF8;	      
    TL0 = 0xCC;
    TR0 = 1; 
	ET0 = 0;
	EA = 1;
}

/*
 * 数码管初始化
*/
void nixietube_init(void)
{
	ADDR3 = 1;
	ENLED = 0;
}

/*
 * 制作数码管显示数据
*/
void make_led_number(uint32 num)
{
	ET0 = 0;
	Led_buf[5] = Ledcode[num/100000%10];
	Led_buf[4] = Ledcode[num/10000%10];
	Led_buf[3] = Ledcode[num/1000%10];
	Led_buf[2] = Ledcode[num/100%10];
	Led_buf[1] = Ledcode[num/10%10];
	Led_buf[0] = Ledcode[num%10];
	ET0 = 1;
}

/*
 * 数码管显示
*/
void show_num(uint8 *buf)
{
	ENLED = 1;
	switch (Led_n)
	{
		case 0: 
			ADDR0 = 0;
			ADDR1 = 0;
			ADDR2 = 0;
			P0 = buf[0];
			break;
		case 1: 
			ADDR0 = 1;
			ADDR1 = 0;
			ADDR2 = 0;
			P0 = buf[1];
			break;
		case 2: 
			ADDR0 = 0;
			ADDR1 = 1;
			ADDR2 = 0;
			P0 = buf[2];
			break;
		case 3: 
			ADDR0 = 1;
			ADDR1 = 1;
			ADDR2 = 0;
			P0 = buf[3];
			break;
		case 4: 
			ADDR0 = 0;
			ADDR1 = 0;
			ADDR2 = 1;
			P0 = buf[4];
			break;
		case 5: 
			ADDR0 = 1;
			ADDR1 = 0;
			ADDR2 = 1;
			P0 = buf[5];
			break;
	}
	ENLED = 0;

	if (Led_n >= 5)
		Led_n = 0;
	else
		Led_n++;
}


main()
{
	nixietube_init();
	timer0_init();
	
	i2c_read_buf((uint8 *)&Power_up, E2P_RECORD_ADDR, sizeof(POWER_UP));
	if (Power_up.flag != POWER_UP_MARK)
	{
		Power_up.flag = POWER_UP_MARK;
		Power_up.times = 1;
	}
	else
	{
		Power_up.times++;
	}
	i2c_write_buf((uint8 *)&Power_up, E2P_RECORD_ADDR, sizeof(POWER_UP));

	make_led_number(Power_up.times);

	while (1);
}


void time0() interrupt 1
{
	TR0 = 0;
	TH0 = 0xF8;
	TL0 = 0xCC;

	show_num(Led_buf);

	TR0 = 1;
}

⌨️ 快捷键说明

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