📄 ex1.c
字号:
//-------------------------------------包涵文件
#include "..\uc_os_II\includes.h"
#include "..\Ex1_Keil\ucos51_bl.h"
//-------------------------------------定义任务堆栈大小
OS_STK xdata KEYStack[CPU_MAX_STK_SIZE]; //定义OS_STK堆栈类型,存放于xdata连续空间,大小为CPU_MAX_STK_SIZE的数组中
OS_STK xdata SPKStack[CPU_MAX_STK_SIZE];
OS_STK xdata LEDStack[CPU_MAX_STK_SIZE];
//-------------------------------------函数定义
void fsbyte(INT8U byte);
//-------------------------------------按键扫描(10ms-100ms)
void jianpan(void xdata * ppdata) reentrant
{
ppdata = ppdata;
while(1)
{
if(P1&128)
{
keyys=0,keyok=0;
OSTimeDly(10);//100ms
}
else
{
OSTimeDly(1);//10ms
keyys++;
if(keyys>=5 & keyok==0)//连按无效
{
keyok=1;
sycd=10,syyx=1;
keyys=0,key++;
if(key>=100) key=0;
}
}
}
}
//-------------------------------------喇叭程序(10ms)
void SPK(void xdata * ppdata) reentrant
{
ppdata = ppdata;
while(1)
{
OSTimeDly(1);
if(syyx==1)
{
P3|=1;
if(sycd>0)
{
sycd--;
}
else
{
syyx=0;
P3&=254;
}
}
else
{
sycd=0,P3&=254;
}
}
}
//-------------------------------------LED扫描(2ms)
void LedSM(void xdata * ppdata) reentrant
{
unsigned char err=0;
ppdata = ppdata;
while(1)
{
OSMboxPend (LEDSM,0,&err);
js100++;
P1&=252;
switch(ledfen)
{
case 0:
{//个位扫描
ledfen=1;
fsbyte(LED[ge]);
P1|=1;
}
break;
case 1:
{//十位扫描
ledfen=0;
fsbyte(LED[shi]);
P1|=2;
}
break;
default:
ledfen=0;
}
if(js100>=50)
{//100ms
js100=0;
ge=key%10;
shi=key/10;
if(shi==0) shi=10;
}
}
}
//-------------------------------------字节发送器
void fsbyte(INT8U byte)
{
unsigned char fsjsq=0;
for(fsjsq=0;fsjsq<8;fsjsq++)
{
P1&=251; //CLK=0
P1|=((byte<<fsjsq)&128)>>4;
P1|=4; //CLK=1
P1&=247;
}
}
//-------------------------------------参数初始化
void ParameterInitial()
{
//计数器
time0=0;
//按键
keyys=keyok=key=0;
//led分配器
ledfen=0;
js100=0;
//100ms计数器清空
js100=0;
//声音
sycd=0;syyx=0;
//LED表
//0 ;1 ;2 ;3 ;4
LED[0]=192;LED[1]=249;LED[2]=164;LED[3]=176;LED[4]=153;
//5 ;6 ;7 ;8 ;9
LED[5]=146;LED[6]=130;LED[7]=248;LED[8]=128;LED[9]=144;
//Nothing ;
LED[10]=255;
//邮箱
LEDSM=OSMboxCreate((void*)0);
}
//-------------------------------------定时中断初始化
void InterruptInitial()
{
/* set timer. 50ms, THTL = 3caf when cpu at 12MHz */
TMOD = 0x01; //2ms,mode 1,16 bits
TH0 = TIMER_24M_25MS_H;
TL0 = TIMER_24M_25MS_L;
/* TR0 is set in OSStart() */
ET0 = 1;
}
//-------------------------------------主函数
main()
{
InterruptInitial();
OSInit();
ParameterInitial();
OSTaskCreate(LedSM, (void xdata *)0, &LEDStack[0], 1);
OSTaskCreate(jianpan, (void xdata *)0, &KEYStack[0], 2);
OSTaskCreate(SPK, (void xdata *)0, &SPKStack[0], 3);
OSStart();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -