标题:
51单片机写的电梯程序
[打印本页]
作者:
h1007886499
时间:
2018-3-16 20:37
标题:
51单片机写的电梯程序
电梯用到中断,数码管,和现实中电梯有相同的功能,考虑的应该很全了
/**************功能:电梯楼层的控制的显示*******/
#include<reg52.h>
#define uchar unsigned char //宏定义
sbit fmq=P3^6; //蜂鸣器的定义
uchar pg=0, pf=0,g=9,p=0; //定义 pg存是数码管显示的数字 ,pf存按键返回的值
uchar house_code[8]={0};
uchar code dis_playd[11]={0xf9,0xa4,0xb0,0x99,0x92,0x82,
0xf8,0x80,0xfe,0xbf,0xf7}; //数组中存有"1~8"、"上-"、“中-”、 “下-”
uchar code dis_playw[3 ]={0x7f,0xbf,0xdf}; //位选的三位
uchar code key_defin[8 ]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,};//按键的编
/**************函数声明***************/
void dis_up1();
uchar keyscan();
void dis_down1();
/*************1ms延时函数*********************/
void delay_1ms(uchar i)
{
uchar j=0;
while(i--)
for(j=0;j<115;j++)
;
}
/*************数码管显示*****************/
void display(uchar k)
{
P2=dis_playw[0];
P0=dis_playd[pg];
delay_1ms(2);
P0=0xff;
P2=dis_playw[1];
P0=dis_playd[k];
delay_1ms(2);
P0=0xff;
}
/***************数码管中的延时*************/
void delay_x1(int i)
{
uchar j=0;
while(i--)
{
for(j=0;j<115;j++)
{
display(g);
}
}
}
/*******上升重按键扫描******/
void delay_x(int i)
{
uchar j=0;
while(i--)
{
for(j=0;j<115;j++)
{
display(g);
if(P1!=0xf0)
{
delay_1ms(10);
if(P1!=0xf0)
{
pf=keyscan();
if(pf!=p&&pf!=pg)
{
dis_up1();
}
}
}
}
}
}
/*******下降重按键扫描******/
void delay_x2(int i)
{
uchar j=0;
while(i--)
{
for(j=0;j<115;j++)
{
display(g);
if(P1!=0xf0)
{
delay_1ms(10);
if(P1!=0xf0)
{
pf=keyscan();
if(pf!=p&&pf!=pg)
{
dis_down1();
}
}
}
}
}
}
/**************产生1KHZ频率声音的函数**************/
void beep(void)
{
fmq=0;
delay_1ms(100);
fmq=1;
delay_1ms(100);
}
/*************线反转法检测 按下了哪一个键并返回数值 **********/
uchar keyscan()
{
uchar k1=0,k2=0,k=0,i=0,j=0;
P1=0xf0;
if(P1!=0xf0)
{
delay_1ms(20);
if(P1!=0xf0)
{
k1=P1;
P1=0x0f;
k2=P1;
k=k1|k2;
for(i=0;i<16;i++)
{
if(k==key_defin[i])
{
j=i;
return(j);
}
}
while(P1!=0x0f)
;
}
}
return(0);
}
/***********上升嵌套函数 **************/
void dis_up1()
{
while(pf>pg)
{
g=8;
delay_x1(2);
pg++;
}
g=9;
display(g);
beep();
delay_x1(2);
}
/*********下降套函数 ****************/
void dis_down1()
{
while(pf<pg)
{
g=10;
delay_x1(2);
pg--;
}
g=9;
display(g);
beep();
delay_x1(2);
}
/****************电梯上升函数**************/
void dis_up()
{
P1=0xf0;
while(p>pg)
{
g=8;
delay_x(2);
pg++;
}
g=9;
display(g);
beep();
}
/****************电梯下降函数**************/
void dis_down()
{
while(p<pg)
{
g=10;
delay_x2(2);
pg--;
}
g=9;
display(9);
beep();
}
复制代码
余下自己下载
电梯程序.rar
2018-3-16 20:36 上传
点击文件名下载附件
下载积分: 黑币 -5
27.67 KB, 下载次数: 41, 下载积分: 黑币 -5
作者:
admin
时间:
2018-3-17 01:24
楼主能分享个原理图吗?
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1