完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
`这是我的电梯程序 只有板子的程序 不会写驱动电机转动的相关c语言程序,求大神帮忙指点 ![]() ![]() #include #define uchar unsigned char //无符号字符型 宏定义 变量范围0~255 #define uint unsigned int //无符号整型 宏定义 变量范围0~65535 //数码管段选定义 0 1 2 3 4 5 6 7 8 9 uchar code smg_du[]={0xde,0x90,0xcd,0xd9,0x93,0x5b,0x5f,0xd0,0xdf,0xdb // A B C D E F 不显示 }; //断码 uchar dis_smg[8] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8}; bit flag_100ms,flag_1s; bit flag_stop = 1; //用做到了相应的楼停下 ***it beep = P2^3; ***it xia = P2^0; ***it zhong = P2^1; ***it shang = P2^2; uchar value2; ***it led1 = P1^0; //8个发光二极管定义 ***it led2 = P1^1; ***it led3 = P1^2; ***it led4 = P1^3; ***it led5 = P1^4; ***it led6 = P1^5; uchar dt_1; //1楼电梯标志位 uchar dt_2; //2楼电梯标志位 uchar dt_3; //3楼电梯标志位 uchar dt_4; //4楼电梯标志位 uchar dt_5; //5楼电梯标志位 uchar dt_6; //6楼电梯标志位 uchar dt_value = 1; //电梯到哪一层的变量 uchar dt_s_x ; //电梯上下的标志位 /***********************1ms延时函数*****************************/ void delay_1ms(uint q) { uint i,j; for(i=0;i for(j=0;j<120;j++); } /********************独立按键程序*****************/ uchar key_can; //按键值 void key() //独立按键程序 { static uchar key_new; key_can = 20; //按键值还原 P3 |= 0xff; if((P3 & 0xff) != 0xff) //按键按下 { delay_1ms(1); //按键消抖动 if(((P3 & 0xff) != 0xff) && (key_new == 1)) { //确认是按键按下 key_new = 0; switch(P3) { case 0xfe: key_can = 1; break; //得到按键值 case 0xfd: key_can = 2; break; //得到按键值 case 0xfb: key_can = 3; break; //得到按键值 case 0xf7: key_can = 4; break; //得到按键值 case 0xef: key_can = 5; break; //得到按键值 case 0xdf: key_can = 6; break; //得到按键值 } } } else key_new = 1; } void key_with() { if(key_can == 1) { led1 = 1; //点亮发光二极管 dt_1 = 1; // } if(key_can == 2) { led2 = 1; //点亮发光二极管 dt_2 = 1; } if(key_can == 3) { led3 = 1; //点亮发光二极管 dt_3 = 1; } if(key_can == 4) { led4 = 1; //点亮发光二极管 dt_4 = 1; } if(key_can == 5) { led5 = 1; //点亮发光二极管 dt_5 = 1; } if(key_can == 6) { led6 = 1; //点亮发光二极管 dt_6 = 1; } } /*********************当电梯不动时、判断是向上、还是向下**********************/ void tiandi_shang_xia() { static uchar value; if(dt_s_x == 0) { flag_stop = 1; if(dt_value == 1) //电梯在第1层停下不走了 { value = dt_2 + dt_3 + dt_4 + dt_5 + dt_6 ; if(value != 0) { dt_s_x = 1; //电梯向上 shang = 0; //显示上 zhong = 0; xia = 1; } } if(dt_value == 2) //电梯在第2层停下不走了 { value = dt_3 + dt_4 + dt_5 + dt_6 ; if(value != 0) { dt_s_x = 1; //电梯向上走 shang = 0; //显示上 zhong = 0; xia = 1; } value = dt_1; if(value != 0) { dt_s_x = 2; //电梯向下走 xia = 0; //显示下 zhong = 0; shang = 1; } } if(dt_value == 3) //电梯在第3层停下不走了 { value = dt_4 + dt_5 + dt_6; if(value != 0) { dt_s_x = 1; //电梯向上走 shang = 0; //显示上 zhong = 0; xia = 1; } value = dt_1 + dt_2; if(value != 0) { dt_s_x = 2; //电梯向下走 xia = 0; //显示下 zhong = 0; shang = 1; } } if(dt_value == 4) //电梯在第4层停下不走了 { value = + dt_5 + dt_6; if(value != 0) { dt_s_x = 1; //电梯向上走 shang = 0; //显示上 zhong = 0; xia = 1; } value = dt_1 + dt_2 + dt_3; if(value != 0) { dt_s_x = 2; //电梯向下走 xia = 0; //显示下 zhong = 0; shang = 1; } } if(dt_value == 5) //电梯在第5层停下不走了 { value = dt_6; if(value != 0) { dt_s_x = 1; //电梯向上走 shang = 0; //显示上 zhong = 0; xia = 1; } value = dt_1 + dt_2 + dt_3 + dt_4; if(value != 0) { dt_s_x = 2; //电梯向下走 xia = 0; //显示下 zhong = 0; shang = 1; } } if(dt_value == 6) //电梯在第6层停下不走了 { value = dt_6; if(value != 0) { dt_s_x = 1; //电梯向上走 shang = 0; //显示上 zhong = 0; xia = 1; } value = dt_1 + dt_2 + dt_3 + dt_4 + dt_5 + dt_6; if(value != 0) { dt_s_x = 2; //电梯向下走 xia = 0; //显示下 zhong = 0; shang = 1; } } } } /****************电梯向上、做最后的判断是否还要继续向上****************/ void dt_shang_guan() { uchar value; if(dt_s_x == 1) //电梯向上 做最后的判断是否还要继续向上 { if(dt_value == 1) //在第1层 { value = dt_2 + dt_3 + dt_4 + dt_5 + dt_6; if(value == 0) //说明上面没有人按下 { dt_s_x = 0; //电梯停下不动了 shang = 1; //关闭上字 zhong = 1; }else flag_stop = 1; } else if(dt_value == 2) //在第2层 { value = dt_3 + dt_4 + dt_5 + dt_6; if(value == 0) //说明上面没有人按下 { dt_s_x = 0; //电梯停下不动了 shang = 1; //关闭上字 zhong = 1; }else flag_stop = 1; } else if(dt_value == 3) //在第3层 { value = dt_4 + dt_5 + dt_6; if(value == 0) //说明上面没有人按下 { dt_s_x = 0; //电梯停下不动了 shang = 1; //关闭上字 zhong = 1; }else flag_stop = 1; } else if(dt_value == 4) //在第4层 { value = dt_5 + dt_6; if(value == 0) //说明上面没有人按下 { dt_s_x = 0; //电梯停下不动了 shang = 1; //关闭上字 zhong = 1; }else flag_stop = 1; } else if(dt_value == 5) //在第5层 { value = dt_6; if(value == 0) //说明上面没有人按下 { dt_s_x = 0; //电梯停下不动了 shang = 1; //关闭上字 zhong = 1; }else flag_stop = 1; } else if(dt_value == 6) //在第6层 { dt_s_x = 0; //电梯停下不动了 shang = 1; //关闭上字 zhong = 1; } } } /****************电梯向下、做最后的判断是否还要继续向下****************/ void dt_xia_guan() { uchar value; if(dt_s_x == 2) //电梯向下 做最后的判断是否还要继续向下 { if(dt_value == 1) //在第1层 { dt_s_x = 0; //电梯停下不动了 xia = 1; //关闭上字 zhong = 1; flag_stop = 1; } else if(dt_value == 2) //在第2层 { value = dt_1; if(value == 0) //说明上面没有人按下 { dt_s_x = 0; //电梯停下不动了 xia = 1; //关闭上字 zhong = 1; }else flag_stop = 1; } else if(dt_value == 3) //在第3层 { value = dt_1 + dt_2; if(value == 0) //说明上面没有人按下 { dt_s_x = 0; //电梯停下不动了 xia = 1; //关闭上字 zhong = 1; }else flag_stop = 1; } else if(dt_value == 4) //在第4层 { value = dt_2 + dt_3; if(value == 0) //说明上面没有人按下 { dt_s_x = 0; //电梯停下不动了 xia = 1; //关闭上字 zhong = 1; }else flag_stop = 1; } else if(dt_value == 5) //在第5层 { value = dt_1 + dt_2 + dt_4; if(value == 0) //说明上面没有人按下 { dt_s_x = 0; //电梯停下不动了 xia = 1; //关闭上字 zhong = 1; }else flag_stop = 1; } else if(dt_value == 6) //在第6层 { value = dt_1 + dt_2 + dt_3 + dt_4 + dt_5; if(value == 0) //说明上面没有人按下 { dt_s_x = 0; //电梯停下不动了 xia = 1; //关闭上字 zhong = 1; }else flag_stop = 1; } } } /***********************电梯处理函数************************/ void td_dis() { uchar value,value1; value = dt_1 + dt_2 + dt_3 + dt_4 + dt_5 + dt_6; if(value != 0) { //100ms if(flag_stop == 1) //到相应的楼了 要停下 { /***************************向上走电梯***********************************/ if(dt_s_x != 0) //向上走电梯 { value1 ++; if(value1 >= 10) //1s { value1 = 0; if(dt_s_x == 1) //向上走电梯 { dt_value ++; shang = 0; //显示上字 zhong = 0; } if(dt_s_x == 2) //向下走电梯 { dt_value --; xia = 0; //显示下字 zhong = 0; } if(dt_value == 1) //当到了第一层的时候 { if(dt_1 == 1) { led1 = 0; //关闭第一层发光二极管 dt_1 = 0; //清零电机在的标志 flag_stop = 0; //到停下 beep = 0; //打开蜂鸣器 } } else if(dt_value == 2) //当到了第二层的时候 { if(dt_2 == 1) { led2 = 0; //关闭第二层发光二极管 dt_2 = 0; //清零电机在的标志 flag_stop = 0; //到停下 beep = 0; //打开蜂鸣器 } } else if(dt_value == 3) //当到了第3层的时候 { if(dt_3 == 1) { led3 = 0; //关闭第3层发光二极管 dt_3 = 0; //清零电机在的标志 flag_stop = 0; //到停下 beep = 0; //打开蜂鸣器 } } else if(dt_value == 4) //当到了第4层的时候 { if(dt_4 == 1) { led4 = 0; //关闭第4层发光二极管 dt_4 = 0; //清零电机在的标志 flag_stop = 0; //到停下 beep = 0; //打开蜂鸣器 } } else if(dt_value == 5) //当到了第5层的时候 { if(dt_5 == 1) { led5 = 0; //关闭第5层发光二极管 dt_5 = 0; //清零电机在的标志 flag_stop = 0; //到停下 beep = 0; //打开蜂鸣器 } } else if(dt_value == 6) //当到了第6层的时候 { if(dt_6 == 1) { led6 = 0; //关闭第6层发光二极管 dt_6 = 0; //清零电机在的标志 flag_stop = 0; //到停下 beep = 0; //打开蜂鸣器 } } } } } } if(flag_stop == 0) { // flag_stop = 1; // value1 = 0; value2 ++; if(value2 % 5 == 0) { if(dt_s_x == 1) //上 { shang = ~shang; zhong = ~zhong; } if(dt_s_x == 2) //下 { zhong = ~zhong; xia = ~xia; } } if(value2 >= 10) //1.0s { beep = 1; //关闭蜂鸣器 } if(value2 >= 20) { value2 = 0; dt_shang_guan(); //电梯向上 做最后的判断是否还要继续向上 dt_xia_guan(); //电梯向下 做最后的判断是否还要继续向下 } } } /*************定时器0初始化程序***************/ void time_init() { EA = 1; //开总中断 TMOD = 0X01; //定时器0、工作方式1 ET0 = 1; //开定时器0中断 TR0 = 1; //允许定时器0定时 } /******************主程序**********************/ void main() { P3 = 0xff; P2 = 0xff; P1 = 0x00; P0 = 0X00; //单片机IO口初始化 time_init(); //定时器初始化 while(1) { key(); //按键程序 if(key_can < 20) { if(dt_s_x == 0) { value2 = 0; flag_stop = 1; } key_with(); } tiandi_shang_xia(); //当电梯不动时、判断是向上、还是向下 P0 = smg_du[dt_value]; //显示 if(flag_100ms == 1) { flag_100ms = 0; td_dis(); //电梯处理函数 } } } /*************定时器0中断服务程序***************/ void time0_int() interrupt 1 { static uchar value; TH0 = 0x3c; TL0 = 0xb0; // 50ms value ++; if(value % 2 == 0) { flag_100ms = 1 ; } } ` ![]() |
|
相关推荐
3个回答
|
|
|
|
|
|
可以用个定时器来驱动步进电机,电机需要定时器中断发出脉冲
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1406 浏览 2 评论
2465 浏览 5 评论
2322 浏览 0 评论
设计一个TEC驱动电路输出19V6A,有没有办法把输出整成直流?
1668 浏览 0 评论
2843 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-11 14:27 , Processed in 0.707051 second(s), Total 79, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191