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