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

📄 ex1.c

📁 ucos2 程序代码!!!!!可用与51单片机
💻 C
字号:
#include "..\uc_os_II\includes.h"
#include<reg51.h>
#define uchar unsigned char
#define uint  unsigned int
/*TS12864A-3 端口定义*/
#define LCD_data  P0             //数据口
sbit LCD_RS  =  P3^5;            //寄存器选择输入 
sbit LCD_RW  =  P3^6;            //液晶读/写控制
sbit LCD_EN  =  P3^4;            //液晶使能控制
sbit LCD_PSB =  P3^7;            //串/并方式控制
sbit wela    =  P2^6;
sbit dula    =  P2^7;
uchar code dis[] = {"正在进入UCOS"};
uchar code dis0[] = {"请稍候..."};
uchar code dis1[] = {"任务一 (时间)"};
uchar code dis2[] = {"小时  分钟  秒"};
uchar code dis22[] = {"马上切换"};
uchar code dis3[] = {"任务二(网站)"};
uchar code dis4[] = {"WWW.UESTC.com "};
uchar code dis5[] = {"WWW.BAIDU.com "};
uchar code dis55[] = {"马上切换"};
//uchar count,flag;
#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
uchar IRDIS[2];
uchar IRCOM[4];
void delay0(uchar x);  //x*0.14MS
void beep();
void  dataconv();
void lcd_pos(uchar X,uchar Y);  //确定显示位置
OS_STK xdata Task1Stack[CPU_MAX_STK_SIZE];
OS_STK xdata Task2Stack[CPU_MAX_STK_SIZE];




void Task1(void xdata * ppdata) reentrant
{
	uchar i,j,hour0=0x30,hour1=0x30,min0=0x30,min1=0x30,sec0=0x30,sec1=0x30;
	ppdata = ppdata;
	while(1)
	{
		OSTimeDlyHMSM(0, 0, 3, 50);
		 wela=0;
		dula=0; 
		P1=0X00;
	    lcd_init();                //初始化LCD             
	  
	    lcd_pos(0,0);             //设置显示位置为第一行的第1个字符
	     i = 0;
	    while(dis1[i] != '\0')
	     {                         //显示字符
	       lcd_wdat(dis1[i]);
	       i++;
	     }
	    lcd_pos(1,0);             //设置显示位置为第二行的第1个字符
	     i = 0;
	    while(dis2[i] != '\0')
	     {
	       lcd_wdat(dis2[i]);      //显示字符
	       i++;
	     }
		lcd_pos(2,0); 
		lcd_wdat(0x20);
		lcd_wdat(hour0);      //显示字符
	   	lcd_wdat(hour1);
		lcd_wdat(0x20);  
		lcd_wdat(0x20);
		lcd_wdat(0x20);	
		lcd_wdat(0x20);
		lcd_wdat(min0);     
		lcd_wdat(min1);
		lcd_wdat(0x20);  	
		lcd_wdat(0x20);		
		lcd_wdat(0x20); 	
		lcd_wdat(sec0); 
		lcd_wdat(sec1); 
		lcd_pos(3,0);             //设置显示位置为第二行的第1个字符
	     i = 0;
	    while(dis22[i] != '\0')
	     {
	       lcd_wdat(dis22[i]);      //显示字符
	       i++;
	     }
/*		for(j=0;j<30;j++)
				if(flag==1)
					{
					flag=0;
					sec1++;
					if(sec1==10)	
						{
							sec1=0;sec0++;
						}
					if(sec0==10)
						{
							sec0=0;min1++;
						}
					if(min1==10)
						{
						 	min1=0;min0++;
						}
					lcd_pos(2,0); 
					lcd_wdat(0x20);
					lcd_wdat(hour0);      //显示字符
				   	lcd_wdat(hour1);
					lcd_wdat(0x20);  
					lcd_wdat(0x20);
					lcd_wdat(0x20);	
					lcd_wdat(0x20);
					lcd_wdat(min0);     
					lcd_wdat(min1);
					lcd_wdat(0x20);  	
					lcd_wdat(0x20);		
					lcd_wdat(0x20); 	
					lcd_wdat(sec0); 
					lcd_wdat(sec1); 
					delay(10);
				}*/

	}
}

void Task2(void xdata * ppdata) reentrant
{
	uchar i;
	ppdata = ppdata;
	while(1)
	{
		
		OSTimeDlyHMSM(0, 0, 4, 0);
		lcd_init();                //初始化LCD         
		P1=0XFF;
		 wela=0;
		dula=0; 		              
		 lcd_pos(0,0);             //设置显示位置为第三行的第1个字符
	     i = 0;
	    while(dis3[i] != '\0')
	     {
	       lcd_wdat(dis3[i]);      //显示字符
	       i++;
	     }
		 lcd_pos(1,0);             //设置显示位置为第四行的第1个字符
	     i = 0;
	    while(dis4[i] != '\0')
	     {
	       lcd_wdat(dis4[i]);      //显示字符
	       i++;
	     }
	 		lcd_pos(2,0);             //设置显示位置为第四行的第1个字符
	   	  i = 0;
	    while(dis5[i] != '\0')
	     {
	       lcd_wdat(dis5[i]);      //显示字符
	       i++;
	     }
		lcd_pos(3,0);             //设置显示位置为第二行的第1个字符
	     i = 0;
	    while(dis55[i] != '\0')
	     {
	       lcd_wdat(dis55[i]);      //显示字符
	       i++;
	     }
	}
}

void InterruptInitial()
{
	/* set timer. 50ms, THTL = 3caf when cpu at 11.0592MHz */

	TMOD |= 0x11;
	TH0 = 0xB8;
	TL0 = 0x00;
	/* TR0 is set in OSStart() */
	ET0 = 1;
/*	TH1 = 0x4C;
	TL1 = 0x00;
	ET1 = 1;
	TR1 = 1;	
	count=0;*/
}
void main()
{
		uchar i;
		P1=0xF0;
	    wela=0;
		dula=0; 
		InterruptInitial();
		 lcd_init();                //初始化LCD             
	  
	    lcd_pos(0,0);             //设置显示位置为第一行的第1个字符
	     i = 0;
	    while(dis[i] != '\0')
	     {                         //显示字符
	       lcd_wdat(dis[i]);
	       i++;
	     }
		 lcd_pos(1,0);             //设置显示位置为第二行的第1个字符
	     i = 0;
	    while(dis0[i] != '\0')
	     {
	       lcd_wdat(dis0[i]);      //显示字符
	       i++;
	     }

	  OSInit();

 	 OSTaskCreate(Task1, (void xdata *)0, &Task1Stack[0],2);
	 OSTaskCreate(Task2, (void xdata *)0, &Task2Stack[0],3);
		
OSStart();
}

/*
void inter(void) interrupt 3 
{
	TH1 = 0x4C;
	TL1 = 0x00;
	count++;
	if(count==20)
		{
			count=0;
			flag=1;	
		}
}*/

⌨️ 快捷键说明

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