C51 程序数码管继电器等控制程式解析.docx
- 文档编号:8691663
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:35
- 大小:20.26KB
C51 程序数码管继电器等控制程式解析.docx
《C51 程序数码管继电器等控制程式解析.docx》由会员分享,可在线阅读,更多相关《C51 程序数码管继电器等控制程式解析.docx(35页珍藏版)》请在冰豆网上搜索。
C51程序数码管继电器等控制程式解析
以下程式,为T8试烧台的控制程式:
器件有六位数码管显示、报警器、和控制交流接触器的12V继电器。
#include
#defineuintunsignedint
#defineucharunsignedchar
sbitset=P3^0;//设置时间,按一下相应的位闪烁;
sbitjia=P3^3;//设置位按一下加1;
sbitjian=P3^6;//设置位按一下减1;
sbitgo=P3^1;//功能启动按钮;
sbitrelay1=P2^7;//控制功率;
sbitrelay2=P2^6;//控制警报;
sbitrelay3=P2^5;//控制功率;
sbitrelay4=P2^4;//控制警报;
ucharcodetable[]={//显示编码0,1,2,3,4,5,6,7,8,9,-,H,E,L,U,R
~0x3f,~0x06,~0x5b,~0x4f,
~0x66,~0x6d,~0x7d,~0x07,
~0x7f,~0x6f,~0x40,~0x76,
~0x79,~0x38,~0x3e,~0x77,
~0x49,~0x79,~0x38,~0x3f};
ucharfen,miao,t0,t1,t2,set_flag,set_wei_flag,jia_flag,jian_flag,go_flag;
ucharshi_qianwei,shi_baiwei,shi_shiwei,shi_gewei,fen_shiwei,fen_gewei,
miao_shiwei,miao_gewei;
ucharset_fen,set_miao,shan,shan_over;
charset_shi_q,set_shi_b,set_shi_s,set_shi_g,set_fen_s,set_fen_g,set_miao_s,
set_miao_g,set_wei;
intshi,set_shi,jingbao;
voiddelay(uintz)//延时函数1ms;
{
uintt1,y;
for(t1=z;t1>0;t1--)
for(y=100;y>0;y--);
}
voidMCUinit()//初始化MCU;
{
P0=0;
P1=0;
P2=0;
P3=0;
set=1;
jia=1;
jian=1;
go=1;
set_shi_q=0;
set_shi_b=0;
set_shi_s=0;
set_shi_g=0;
set_fen_s=0;
set_fen_g=0;
set_miao_s=0;
set_miao_g=0;
set_wei=7;
set_flag=0;
jia_flag=0;
jian_flag=0;
go_flag=0;
shi=0;
fen=0;
miao=0;
t0=0;
t1=0;
shan=0;
jingbao=0;
TMOD=0x11;//使能定时器并加入初值
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
EA=1;
ET0=1;
ET1=1;
TR1=1;
}
voidsetscanf()//设置函数
{
while(set_flag==1)
{
if(set_shi<=99)
{
if(set_wei_flag==1)//设置位自左往右循环;
{
set_wei_flag=0;
set_wei--;
if(set_wei<1)
set_wei=6;
}
switch(set_wei)
{
case1:
{
if(jia_flag==1)
{
jia_flag=0;
set_miao_g++;
if(set_miao_g>9)
set_miao_g=0;
}
if(jian_flag==1)
{
jian_flag=0;
set_miao_g--;
if(set_miao_g<0)
set_miao_g=9;
}
//时十位;=============================
P0=table[set_shi_s];
P1=0x20;
delay
(1);
P0=0xff;
//时个位;=============================
P0=table[set_shi_g];
P1=0x10;
delay
(1);
P0=0xff;
//分十位;=============================
P0=table[set_fen_s];
P1=0x08;
delay
(1);
P0=0xff;
//分个位;=============================
P0=table[set_fen_g];
P1=0x04;
delay
(1);
P0=0xff;
//秒十位;=============================
P0=table[set_miao_s];
P1=0x02;
delay
(1);
P0=0xff;
//秒个位;=============================
if(shan<20)//数码管闪烁占空比的控制1:
1
{
P0=table[set_miao_g]&0x7f;
}
else
if(shan>=20)
{
P0=0xff;
}
P1=0x01;
delay
(1);
P0=0xff;
break;
}
case2:
{
if(jia_flag==1)
{
jia_flag=0;
set_miao_s++;
if(set_miao_s>5)
set_miao_s=0;
}
if(jian_flag==1)
{
jian_flag=0;
set_miao_s--;
if(set_miao_s<0)
set_miao_s=5;
}
//时十位;=============================
P0=table[set_shi_s];
P1=0x20;
delay
(1);
P0=0xff;
//时个位;=============================
P0=table[set_shi_g];
P1=0x10;
delay
(1);
P0=0xff;
//分十位;=============================
P0=table[set_fen_s];
P1=0x08;
delay
(1);
P0=0xff;
//分个位;=============================
P0=table[set_fen_g];
P1=0x04;
delay
(1);
P0=0xff;
//秒十位;=============================
if(shan<20)//数码管闪烁占空比的控制1:
1
{
P0=table[set_miao_s]&0x7f;
}
else
if(shan>=20)
{
P0=0xff;
}
P1=0x02;
delay
(1);
P0=0xff;
//秒个位;=============================
P0=table[set_miao_g];
P1=0x01;
delay
(1);
P0=0xff;
break;
}
case3:
{
if(jia_flag==1)
{
jia_flag=0;
set_fen_g++;
if(set_fen_g>9)
set_fen_g=0;
}
if(jian_flag==1)
{
jian_flag=0;
set_fen_g--;
if(set_fen_g<0)
set_fen_g=9;
}
//时十位;=============================
P0=table[set_shi_s];
P1=0x20;
delay
(1);
P0=0xff;
//时个位;=============================
P0=table[set_shi_g];
P1=0x10;
delay
(1);
P0=0xff;
//分十位;=============================
P0=table[set_fen_s];
P1=0x08;
delay
(1);
P0=0xff;
//分个位;=============================
if(shan<20)//数码管闪烁占空比的控制1:
1
{
P0=table[set_fen_g]&0x7f;
}
else
if(shan>=20)
{
P0=0xff;
}
P1=0x04;
delay
(1);
P0=0xff;
//秒十位;=============================
P0=table[set_miao_s];
P1=0x02;
delay
(1);
P0=0xff;
//秒个位;=============================
P0=table[set_miao_g];
P1=0x01;
delay
(1);
P0=0xff;
break;
}
case4:
{
if(jia_flag==1)
{
jia_flag=0;
set_fen_s++;
if(set_fen_s>5)
set_fen_s=0;
}
if(jian_flag==1)
{
jian_flag=0;
set_fen_s--;
if(set_fen_s<0)
set_fen_s=5;
}
//时十位;=============================
P0=table[set_shi_s];
P1=0x20;
delay
(1);
P0=0xff;
//时个位;=============================
P0=table[set_shi_g];
P1=0x10;
delay
(1);
P0=0xff;
//分十位;=============================
if(shan<20)//数码管闪烁占空比的控制1:
1
{
P0=table[set_fen_s]&0x7f;
}
else
if(shan>=20)
{
P0=0xff;
}
P1=0x08;
delay
(1);
P0=0xff;
//分个位;=============================
P0=table[set_fen_g];
P1=0x04;
delay
(1);
P0=0xff;
//秒十位;=============================
P0=table[set_miao_s];
P1=0x02;
delay
(1);
P0=0xff;
//秒个位;=============================
P0=table[set_miao_g];
P1=0x01;
delay
(1);
P0=0xff;
break;
}
case5:
{
if(jia_flag==1)
{
jia_flag=0;
set_shi_g++;
if(set_shi_g>9)
set_shi_g=0;
}
if(jian_flag==1)
{
jian_flag=0;
set_shi_g--;
if(set_shi_g<0)
set_shi_g=9;
}
//时十位;=============================
P0=table[set_shi_s];
P1=0x20;
delay
(1);
P0=0xff;
//时个位;=============================
if(shan<20)//数码管闪烁占空比的控制1:
1
{
P0=table[set_shi_g]&0x7f;
}
else
if(shan>=20)
{
P0=0xff;
}
P1=0x10;
delay
(1);
P0=0xff;
//分十位;=============================
P0=table[set_fen_s];
P1=0x08;
delay
(1);
P0=0xff;
//分个位;=============================
P0=table[set_fen_g];
P1=0x04;
delay
(1);
P0=0xff;
//秒十位;=============================
P0=table[set_miao_s];
P1=0x02;
delay
(1);
P0=0xff;
//秒个位;=============================
P0=table[set_miao_g];
P1=0x01;
delay
(1);
P0=0xff;
break;
}
case6:
{
if(jia_flag==1)
{
jia_flag=0;
set_shi_s++;
if(set_shi_s>9)
{
set_shi_b++;
set_shi_s=0;
}
}
if(jian_flag==1)
{
jian_flag=0;
set_shi_s--;
if(set_shi_s<0)
set_shi_s=9;
}
//时十位;=============================
if(shan<20)//数码管闪烁占空比的控制1:
1
{
P0=table[set_shi_s]&0x7f;
}
else
if(shan>=20)
{
P0=0xff;
}
P1=0x20;
delay
(1);
P0=0xff;
//时个位;=============================
P0=table[set_shi_g];
P1=0x10;
delay
(1);
P0=0xff;
//分十位;=============================
P0=table[set_fen_s];
P1=0x08;
delay
(1);
P0=0xff;
//分个位;=============================
P0=table[set_fen_g];
P1=0x04;
delay
(1);
P0=0xff;
//秒十位;=============================
P0=table[set_miao_s];
P1=0x02;
delay
(1);
P0=0xff;
//秒个位;=============================
P0=table[set_miao_g];
P1=0x01;
delay
(1);
P0=0xff;
break;
}
}
}
else//画面‘三9999三’============
if(set_shi>99)
{
if(set_wei>5)
set_wei=4;
if(set_wei_flag==1)
{
set_wei_flag=0;
set_wei--;
if(set_wei<2)
set_wei=5;
}
switch(set_wei)
{
case2:
{
if(jia_flag==1)
{
jia_flag=0;
set_shi_g++;
if(set_shi_g>9)
set_shi_g=0;
}
if(jian_flag==1)
{
jian_flag=0;
set_shi_g--;
if(set_shi_g<0)
set_shi_g=5;
}
//‘三’位;=============================
P0=table[16];
P1=0x20;
delay
(1);
P0=0xff;
//时千位;=============================
P0=table[set_shi_q];
P1=0x10;
delay
(1);
P0=0xff;
//时百位;=============================
P0=table[set_shi_b];
P1=0x08;
delay
(1);
P0=0xff;
//时分位;=============================
P0=table[set_shi_s];
P1=0x04;
delay
(1);
P0=0xff;
//时个位;=============================
if(shan<20)//数码管闪烁占空比的控制1:
1
{
P0=table[set_shi_g]&0x7f;
}
else
if(shan>=20)
{
P0=0xff;
}
P1=0x02;
delay
(1);
P0=0xff;
//‘三’个位;=============================
P0=table[16];
P1=0x01;
delay
(1);
P0=0xff;
break;
}
case3:
{
if(jia_flag==1)
{
jia_flag=0;
set_shi_s++;
if(set_shi_s>9)
set_shi_s=0;
}
if(jian_flag==1)
{
jian_flag=0;
set_shi_s--;
if(set_shi_s<0)
set_shi_s=9;
}
//时千位;=============================
P0=table[16];
P1=0x20;
delay
(1);
P0
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C51 程序数码管继电器等控制程式解析 程序 数码管 继电器 控制 程式 解析