完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
本帖最后由 yangjing6191519 于 2015-5-8 20:00 编辑
附图一张https://bbs.elecfans.com/jishu_481183_1_1.html原理图proteus 程序在此keil:https://bbs.elecfans.com/forum.ph ... ypeid%26typeid%3D93 void main(void) { UINT8 M,N,P; UINT16 hour,min,l; unsigned long m; M=P0;//拨码开关从P0口输入 N=M&0xf0;//取P0口前四位作为定时时间的小时 P=M&0x0f;// 取P0口后四位作为定时时间的分钟 switch(N) { case 0x00:hour=0; case 0x10:hour=3600;//将小时化为秒 case 0x20:hour=7200; case 0x30:hour=10800; case 0x40:hour=14400; case 0x50:hour=18000; case 0x60:hour=21600; case 0x70:hour=25200; } switch(P) { case 0x00:min=0;//降分钟化为秒 case 0x01:min=300; case 0x02:min=600; case 0x03:min=900; case 0x04:min=1200; case 0x05:min=1500; case 0x06:min=1800; case 0x07:min=2100; case 0x08:min=2400; case 0x09:min=2700; case 0x0a:min=3000; case 0x0b:min=3300; } m=hour+min; //一共要掩饰的时间秒为单位 delay1s(m);//延时设定的时间 led1=1; led2=1; led3=1; led4=1; } void delay1s(unsigned long MS)//延时1s的程序 {UINT8 h,i,j,k; while(MS--) {for(h=5;h>0;h--) for(i=4;i>0;i--) for(j=116;j>0;j--) for(k=214;k>0;k--); } } |
|
相关推荐
25个回答
|
|
|
仿真!难道是proteus!
最佳答案
|
|
|
|
|
|
你的问题是什么啊?
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
本来就是拨码开关输入想要掩饰的时间,高4位是想要延时的小时数,低4位是想要延时的分钟数,再化成秒数进行延时,可是怎么都成功不了, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
可能是哪个地方的判断逻辑问题,你加个中断点,然后用固定值调试一下,应该可以看出问题在哪了 |
|
|
|
|
|
我用固定值了,例如delay1s(10);运行没问题;可是在这里不是后面说的都不运行,就是直接越过,不进行延时 |
|
|
|
|
|
delay1s(10)的时候整体都没有问题吗?是不是unsigned long MS数据结构定义的不合适? |
|
|
|
|
|
#include"reg52.h" /* µ÷ÓÃÍ·Îļþ£¬µ¥Æ¬»úÄÚ²¿¼Ä´æÆ÷¶¼¶¨ÒåÔÚ´Ë£¬ÓõÄʱºòÐèÒªÏȵ÷Óà */ #include #define DataPort P0,P1 ***it led1=P1^4; ***it led2=P1^5; ***it led3=P1^6; ***it led4=P1^7; ***it A1 = P1^0; /* ¶¨Òå²½½øµç»ú¶Ë¿Ú */ ***it B1 = P1^1; /* ¶¨Òå²½½øµç»ú¶Ë¿Ú */ ***it C1 = P1^2; /* ¶¨Òå²½½øµç»ú¶Ë¿Ú */ ***it D1 = P1^3; /**************************** ÿÏàͨµç˳Ðò(Õýת) *******************************/ #define Coil_D1_CW() { A1 = 0; B1 = 0; C1 = 0; D1 = 1;} /* DÏàͨµç,ÆäËûÏà¶Ïµç */ #define Coil_C1_CW() { A1 = 0; B1 = 0; C1 = 1; D1 = 0;} /* CÏàͨµç,ÆäËûÏà¶Ïµç */ #define Coil_B1_CW() { A1 = 0; B1 = 1; C1 = 0; D1 = 0;} /* BÏàͨµç,ÆäËûÏà¶Ïµç */ #define Coil_A1_CW() { A1 = 1; B1 = 0; C1 = 0; D1 = 0;} /* AÏàͨµç,ÆäËûÏà¶Ïµç */ /**************************** ÿÏàͨµç˳Ðò(·´×ª) *******************************/ #define Coil_A1_CCW() { A1 = 1; B1 = 0; C1 = 0; D1 = 0;}/* AÏàͨµç,ÆäËûÏà¶Ïµç */ #define Coil_B1_CCW() { A1 = 0; B1 = 1; C1 = 0; D1 = 0;}/* BÏàͨµç,ÆäËûÏà¶Ïµç */ #define Coil_C1_CCW() { A1 = 0; B1 = 0; C1 = 1; D1 = 0;}/* CÏàͨµç,ÆäËûÏà¶Ïµç */ #define Coil_D1_CCW() { A1 = 0; B1 = 0; C1 = 0; D1 = 1;}/* DÏàͨµç,ÆäËûÏà¶Ïµç */ #define Coil_Off() { A1 = 0; B1 = 0; C1 = 0; D1 = 0;} /* ËùÓÐÏà¶Ïµç */ typedef unsigned char UINT8; /* ¸øunsigned charÖØÐ¶¨ÒåÒ»¸ö±ðÃûUINT8£¬ÓõÄʱºòÖ±½ÓдUINT8¾Í¿ÉÒÔ */ typedef unsigned int UINT16; /* ¸øunsigned intÖØÐ¶¨ÒåÒ»¸ö±ðÃûUINT16£¬ÓõÄʱºòÖ±½ÓдUINT16¾Í¿ÉÒÔ */ /* ¶¨Òå²½½øµç»ú¶Ë¿Ú */ void delay1s(unsigned long MS); /******************************************************************************* * º¯ Êý Ãû : DelayMs * Ãè Êö : ºÁÃëÑÓʱ. * Êä Èë : UINT8 Ms£º * ÒªÑÓʱµÄMsʱ¼ä. MsÖµ·¶Î§Îª0-65535£¬ÊýÖµÔ½´óÑÓʱʱ¼äÔ½³¤ * ·µ »Ø : ÎÞ. *******************************************************************************/ void DelayMs( UINT16 Ms ) { UINT8 i; while (Ms--) { for ( i = 0; i < 114; i++ ); /* Ñ»·114´ó¸ÅÊÇ1MSʱ¼ä */ } } /******************************************************************************* * º¯ Êý Ãû : main * Ãè Êö : Ö÷º¯Êý * Êä Èë : ÎÞ. * ·µ »Ø : ÎÞ. ********************************************************************************/ void main(void) { UINT8 M,N,P; UINT16 hour,min,l; unsigned long m; M=P0; N=M&0xf0; P=M&0x0f; switch(N) { case 0x00:hour=0; case 0x10:hour=3600; case 0x20:hour=7200; case 0x30:hour=10800; case 0x40:hour=14400; case 0x50:hour=18000; case 0x60:hour=21600; case 0x70:hour=25200; } switch(P) { case 0x00:min=0; case 0x01:min=300; case 0x02:min=600; case 0x03:min=900; case 0x04:min=1200; case 0x05:min=1500; case 0x06:min=1800; case 0x07:min=2100; case 0x08:min=2400; case 0x09:min=2700; case 0x0a:min=3000; case 0x0b:min=3300; } m=hour+min; led1=0; led2=0; led3=0; led4=0; delay1s(m); led1=1; led2=1; led3=1; led4=1; for( l = 0 ; l< 512; l++ ) /* Õý´«Ò»È¦ÐèÒª360/(0.17578125*4) = 512 ´ÎÑ»·*/ { Coil_D1_CW() /* DÏàͨµç,ת¶¯(5.625/64)*2¶È = 0.17578125¶È*/ DelayMs(100); /* ÑÓʱ,¿ÉÒÔͨ¹ý¸Ä±äÑÓʱ¸Ä±äƵÂÊ */ Coil_C1_CW() /* CÏàͨµç */ DelayMs(100); Coil_B1_CW() /* BÏàͨµç */ DelayMs(100); Coil_A1_CW() /* AÏàͨµç */ DelayMs(100); } Coil_Off(); /* µç»úÍ£Ö¹ÔËÐÐ,×îºÃ¼ÓÉϸþä,·ñÔòµç»ú»áÓÐÒ»Ïàͨµç¶øÎÞÐÎÖÐÔö¼ÓÁ˹¦ºÄ */ /* Ö÷Ñ»· */ while(1); } void delay1s(unsigned long MS) {UINT8 h,i,j,k; while(MS--) {for(h=5;h>0;h--) for(i=4;i>0;i--) for(j=116;j>0;j--) for(k=214;k>0;k--); } } |
|
|
|
|
|
这是完整程序,但是在PROTEUS中运行,结果总出错,不知道到底是哪里错了,实在是不知道怎么办了, |
|
|
|
|
|
这是完整程序,但是在PROTEUS中运行,结果总出错,不知道到底是哪里错了,实在是不知道怎么办了, |
|
|
|
|
|
恩,有问题吗?下面有我的程序,完整的,功能就是拨码开关输入时间,按输入时间进行延迟,时间到达后步进机转动,乱码部分是文字说明,没有什么关系 |
|
|
|
|
|
恩,有问题吗?下面有我的程序,完整的,功能就是拨码开关输入时间,按输入时间进行延迟,时间到达后步进机转动,乱码部分是文字说明,没有什么关系 |
|
|
|
|
yangjing6191519 发表于 2015-5-7 15:47 我是proteus的版主!你把帖子发到了单片机板块,然后让我来看,考虑过我的感受吗?考虑过吗??考虑过吗??? 呵呵。关键有时候看不到。 |
|
|
|
|
|
|
|
|
|
|
|
你可以看问题中的程序,出于后来我写的程序主要部分,拨码开关还需要特定的程序进行说明吗?我只是用检测P0口的值来进行判定的,例如:UINT8 M,N,P; M=P0; N=M&0xf0; P=M&0x0f; 也就是直接对P0口进行处理(P0口外接拨码开关) |
|
|
|
|
|
#include"reg52.h" #include #define DataPort P0,P1 ***it led1=P1^4; ***it led2=P1^5; ***it led3=P1^6; ***it led4=P1^7; ***it A1 = P1^0; /*步进机A */ ***it B1 = P1^1; /* 步进机A */ ***it C1 = P1^2; /* 步进机A */ ***it D1 = P1^3; /**************************** 步进机各向分别通电 正转*******************************/ #define Coil_D1_CW() { A1 = 0; B1 = 0; C1 = 0; D1 = 1;} #define Coil_C1_CW() { A1 = 0; B1 = 0; C1 = 1; D1 = 0;} #define Coil_B1_CW() { A1 = 0; B1 = 1; C1 = 0; D1 = 0;} #define Coil_A1_CW() { A1 = 1; B1 = 0; C1 = 0; D1 = 0;} /**************************** 步进机反转*******************************/ #define Coil_A1_CCW() { A1 = 1; B1 = 0; C1 = 0; D1 = 0;} #define Coil_B1_CCW() { A1 = 0; B1 = 1; C1 = 0; D1 = 0;} #define Coil_C1_CCW() { A1 = 0; B1 = 0; C1 = 1; D1 = 0;} #define Coil_D1_CCW() { A1 = 0; B1 = 0; C1 = 0; D1 = 1;} #define Coil_Off() { A1 = 0; B1 = 0; C1 = 0; D1 = 0;} /*各向均断电停止转动 */ typedef unsigned char UINT8; typedef unsigned int UINT16; void delay1s(unsigned long MS); void DelayMs( UINT16 Ms ) { UINT8 i; while (Ms--) { for ( i = 0; i < 114; i++ ); } } void main(void) { UINT8 M,N,P; UINT16 hour,min,l; unsigned long m; M=P0; N=M&0xf0; P=M&0x0f; switch(N) { case 0x00:hour=0; case 0x10:hour=3600; case 0x20:hour=7200; case 0x30:hour=10800; case 0x40:hour=14400; case 0x50:hour=18000; case 0x60:hour=21600; case 0x70:hour=25200; } switch(P) { case 0x00:min=0; case 0x01:min=300; case 0x02:min=600; case 0x03:min=900; case 0x04:min=1200; case 0x05:min=1500; case 0x06:min=1800; case 0x07:min=2100; case 0x08:min=2400; case 0x09:min=2700; case 0x0a:min=3000; case 0x0b:min=3300; } m=hour+min; led1=0; led2=0; led3=0; led4=0; delay1s(m);//按输入时间延迟 led1=1; led2=1; led3=1; led4=1; for( l = 0 ; l< 512; l++ ) { Coil_D1_CW() DelayMs(100); Coil_C1_CW() DelayMs(100); Coil_B1_CW() DelayMs(100); Coil_A1_CW() DelayMs(100); } Coil_Off(); while(1); } void delay1s(unsigned long MS)//1S钟延迟 {UINT8 h,i,j,k; while(MS--) {for(h=5;h>0;h--) for(i=4;i>0;i--) for(j=116;j>0;j--) for(k=214;k>0;k--); } } |
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
528 浏览 0 评论
654 浏览 0 评论
858 浏览 0 评论
837 浏览 0 评论
RT-Thread与英飞凌(infineon)合作得板子PSOC 6 板子学习
770 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
17058 浏览 31 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-14 11:31 , Processed in 1.169925 second(s), Total 79, Slave 72 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1720