|
电梯用到中断,数码管,和现实中电梯有相同的功能,考虑的应该很全了
- /**************功能:电梯楼层的控制的显示*******/
- #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
27.67 KB, 下载次数: 41, 下载积分: 黑币 -5
|