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

📄 main.c

📁 从零开始学51单片机源代码
💻 C
字号:
//main.c
#include <reg51.h>	//包含头文件    
#include "fun.h"   

void Timer0_interrupt() interrupt 1
{
	TH0 = T0_50ms >> 8;	   //重装初值 
	TL0 = T0_50ms;

	if ((++ count_in_T0) == 20)//count_in_T0自加到20,计时1s
	{
		count_in_T0 = 0;
		if ( (++ display_num) ==60)
		{//display_num自加1后判断是否等于60
		 	display_num = 0;
			//上发过0消息
			send(0xf0);
			send(0x01);
			send(0xf1);
		}
	}
}

void  USART_interrupt() interrupt 4
{
	char checkXOR;
	if (RI)	 //接收中断 
	{
		RI = 0;
		reciev[rec_num] = SBUF;
		rec_num ++;
		if ((rec_num == 3) && (reciev[0] == 0x0f) )//接收到3字节,并且包头正确 
		{
			checkXOR = reciev[0] ^ reciev[1];
			if (checkXOR == reciev[2] )//如果异或校验正确,判断命令 
			{
				switch (reciev[1])
				{
					case 0x01:
						TR0 = 1;	//启动 
						rec_num = 0;//指令正确,清空缓冲区 
						break;
					case 0x02:
						TR0 = 0;	//暂停 
						rec_num = 0;//指令正确,清空缓冲区
						break;
					default: //如果指令不正确,缓冲区左移 
						reciev[0] = reciev[1];
						reciev[1] = reciev[2];
						rec_num --;
						break;
				}
			}
		}
	}
	if (TI)
	{
		TI = 0;
	}
}

main()
{
	unsigned char shi, ge;	//定义十位、个位要输出的数据 

	ms_delay(100);
	init_port();
	init_usart();	
	init_timer();
	
	dir = 0; //485接收数据 
	rec_num = 0;
	display_num = 0;
	count_in_T0 = 0;
	//把两个数码管都关闭 
	en2 = 1;
	en1 = 1;
	EA = 1;//开总中断 

	while(1)
	{
		shi =  display_num / 10;
		ge = display_num % 10;
		display(shi,ge);	
	}
}

⌨️ 快捷键说明

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