📄 ex1.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 + -