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

📄 main.c

📁 Keilc下的ucosII操作实时系统
💻 C
字号:
/*

www.mcu123.net/bbs
学习论坛

本例程ucOS-II 版本为2.51

 注:
 此例程运行于内RAM > 1024 Byte的51内核的单片机即可。
 比	如 :  SST89E564RD ,STC89C516RD 等


S*/


#include "includes.h"
#include "hc164.h"
#include "at24c64.h"

sbit SIN=P1^0;
sbit SetKey=P2^0;
sbit AddKey=P2^1;
sbit SubKey=P2^2;
sbit DisLed=P2^4;
sbit SetLed=P2^3;
sbit KT1=P2^6;
sbit KT2=P2^7;
sbit Sk=P3^3;

sbit Speaker=P0^6;

bit fDis=0;
bit error=0;
INT8U m=0,b=0,e=0;
INT8U i=0,dat=0,ndis=0,nerr=0,num=0;
INT16U nSet=0,nTimeOut=0;

void dly10ms(void) 
	{ 
		unsigned char i,j,k;
 		for(i=5;i>0;i--) 
			for(j=4;j>0;j--)
 				for(k=248;k>0;k--);
  }
void dly1s(void) 
	{ 
		unsigned char h,i,j,k;
 		for(h=5;h>0;h--) 
			for(i=4;i>0;i--) 
				for(j=116;j>0;j--)
 					for(k=214;k>0;k--);
  }


OS_STK TaskStartStk1[MaxStkSize],TaskStartStk2[MaxStkSize],TaskStartStk3[MaxStkSize];

void Task1(void *nouse) reentrant;
void Task2(void *nouse) reentrant;
void Task3(void *nouse) reentrant;
INT8U ReadWa(void);
void display(INT8U dat);
void Buzzer(void);
void ErrorBz(void);

void main(void)
{
    OSInit();
    InitHardware();
    OSTaskCreate(Task1, (void *)0, &TaskStartStk1[0],2);
    OSTaskCreate(Task2, (void *)0, &TaskStartStk2[0],3);
//	OSTaskCreate(Task3, (void *)0, &TaskStartStk3[0],4);
    OSStart();
}

void Task1(void *nouse) reentrant
{
  	nouse=nouse;
    for(;;)
    {		
        if(Sk==0)
		{
			KT1=0;
			nTimeOut=65535;
			while(nTimeOut--)
			{
				OS_ENTER_CRITICAL();
				dat=ReadWa();
				OS_EXIT_CRITICAL();
				if(dat>0)
					break;
			}
			if(dat<ndis&&(dat>0||nTimeOut==0))
			{
				error=1;
				ErrorBz();
				nerr=0;
				num++;
			}
			else
				num=0;
			nerr++;
			if(error==1&&nerr==2)
			{
				if(num>1)
					nerr=1;
				else
					nerr=0;
				error=0;
				KT2=0;
			}				
			b++;
			if(b>9)
				b=0;
			KT1=1;					
		}
		if(Sk==1)
		KT2=1;
		OSTimeDly(OS_TICKS_PER_SEC*3);
    }    
}

void Task2(void *nouse) reentrant
{  
    nouse=nouse;
    for(;;)
    {
		OS_ENTER_CRITICAL();
		if(SetKey==0)
			{
				dly10ms();
				if(SetKey==0)
				{						
					while(SetKey==0);
					nSet++;
					if(nSet==1)
					{
						fDis=0;
						DisLed=0;
						SetLed=1;
						e=0;
						b=0;
						m=0;
						i=AT24c64_read_byte(0x0002);
						display(i);	
					}
					if(nSet==2)
					{
						nSet=0;
						fDis=1;
						DisLed=1;
						SetLed=0;
						e=0;
						b=0;
						m=0;
						ndis=AT24c64_read_byte(0x0000);
						display(ndis);
						AT24c64_write_byte(0x0002,dat);	
					}
					Buzzer();					
				}
			}
			if(fDis==1)
			{
				if(AddKey==0)
				{
					
					dly10ms();
					if(AddKey==0)
					{  
						while(AddKey==0);
						ndis++;
						if(ndis>10)
							ndis=10;
						e=0;
						b=0;
						m=0;
						display(ndis);
					}
					Buzzer();	
				}
				if(SubKey==0)
				{
					
					dly10ms();					
					if(SubKey==0)
					{	
						while(SubKey==0);				
						if(ndis>1)
							ndis--;
						e=0;
						b=0;
						m=0;
						display(ndis);
					}
					Buzzer();					
				}
				AT24c64_write_byte(0x0000,ndis);
			}
		OS_EXIT_CRITICAL();
        OSTimeDly(OS_TICKS_PER_SEC*2);
    }
}

void Task3(void *nouse) reentrant
{  
    nouse=nouse;
    for(;;)
    {
		
        OSTimeDly(OS_TICKS_PER_SEC);
    }
}

void display(INT8U dt)
{
	INT8U a=0,d=0,c=0;
	if(dt>10)
		dt=10;
	a=dt;
	c=a/10%10;				
	d=a%10;	
	if(c>0)					
	{
		SendData(c&0x01);
		SendData(m);
	}
	else
	{
		SendData(16);
		SendData(d);
	}
	SendData(b);															  
	SendData(e);		
}
void Buzzer(void)
{
	Speaker=0;
	dly10ms();
	dly10ms();
	dly10ms();
	Speaker=1;
}
void ErrorBz(void)
{
	Speaker=0;
	dly1s();
	Speaker=1;
}
 
INT8U ReadWa(void)
{
	while(SIN)
	 {
	 	dly10ms();
		if(SIN)
		{
		  dly10ms();
		  if(SIN)
		  {
		  	dly10ms();
			if(SIN)
			{
				dly10ms();
				e++;
				if(SIN)
				{
				  dly10ms();
				  if(SIN)
				  {
					 dly10ms();
					 if(SIN)
					 {
					  	dly10ms();
						if(SIN)
						{	
						  dly10ms();
						  if(SIN)
						  {
							 dly10ms();
							 if(SIN)
							 {
							   e++;
							   return 10;
							 }
							 else
								 return 9;
					   	  }
						  else
							  return 8;
						}
						else
							return 7;
					 }
					 else
						return 6;
				  }
				  else
					  return 5;;
				}
				else
					return 4;	
			}
			else
				return 3;
		  }
		  else
		  	return 2;
		}
		else
			return 1;
	 }
	 return 0;	
}

⌨️ 快捷键说明

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