求大神编写51单片机程序 内容如下 如果采取可再加悬赏

检测P0.4的状态 当它由低电平变为高电平的时候
P0.1输出高电平(实现电机正转)
同样检测P0.3的状态 当它为低电平变成高电平的时候
此时延时两秒 然后在P0.2输出一个高电平(实现电机反转)
如此形成一个循环(电机正转 ——延时——反转) 要求可以设置此循环的次数
(其中P0.3和P0.4实际是限位开关控制的端口)

#define OSC 12000000//12MHz晶体
#define YANSHI 2.00//延时2.00秒,精度10mS,最多655.35 S。
#define QUANSHU 3 //正反转一次,算一圈,总共QUANSHU圈。
//===================================================================
#define BASETIME (unsigned int)(65536-(0.01/(12.0/OSC)))//10mS定时常数
#define ISRTIMES (YANSHI*100)
#include <reg51.h>
sbit ZZ=P0^1; //正转启动,1表示正转
sbit FZ=P0^2;
sbit ZXW=P0^3; //正转到位开关,1表示到位。
sbit FXW=P0^4; //反转到位开关,1表示到位。
unsigned int T_10mS;
unsigned char Quanshu;
unsigned char Status;
unsigned char GetPos(void)
{
if(FXW==1) return 0;//反限位到达,启动正转
if(ZXW==1) return 1;//正限位到达,启动延时
return 0;//正转优先。
}
main()
{
ZZ=0;FZ=0;
ZXW=1;FXW=1;
TMOD=1;
TH0=0xff;TL0=0xff;
ET0=1;EA=1;
//判断初始位置
Status=GetPos();
for(Quanshu=0;Quanshu<QUANSHU;Quanshu++)
{
switch(Status)
{
case 0:FZ=0;ZZ=1;while(ZXW==0);ZZ=0;Status++;
case 1:T_10mS=0;
TR0=1;while(T_10mS!=ISRTIMES);TR0=0;
Status++;
case 2:ZZ=0;FZ=1;while(FXW==0);FZ=0;Status=0;
break;
}
}
while(1);
}
void ISRT0(void) interrupt 1
{
TH0=BASETIME/256;
TL0=BASETIME%256;
T_10mS++;

}
呵呵,冗余设计的不够。烧了电机甭怪我。初次调试,注意几个管脚的电平及用途。
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-05-10
请问你循环次数上限多少?用什么方式输入?用什么显示次数?追问

您好 我没的输入  不需要这么复杂  
循环次数直接单片机程序上设置就行了  
三四次就ok  麻烦大神  求程序啊

第2个回答  2013-05-10
不需要太精确用循环就行追问

那麻烦下  能帮编一个程序吗?

求大神编写51单片机程序 内容如下 如果采取可再加悬赏
define OSC 12000000\/\/12MHz晶体 define YANSHI 2.00\/\/延时2.00秒,精度10mS,最多655.35 S。define QUANSHU 3 \/\/正反转一次,算一圈,总共QUANSHU圈。\/\/=== define BASETIME (unsigned int)(65536-(0.01\/(12.0\/OSC)))\/\/10mS定时常数 define ISRTIMES (YANSHI*100)include <reg51.h> ...

求大神在keil上帮写51单片机C语言程序
\/\/第一个实验:\/\/假设8个LED阴极指向单片机,D11连接P0.1,D12连接P0.2 ... D18连接P0.7\/\/假设K1按键在P2.3引脚#include<reg51.h>#include<intrins.h>sbit k1=P2^3;\/\/假设K1按键在P2.3引脚void main(){P0=0xfe;while(1){if(k1==0){while(k1==0);P0=_crol_(P0,1);}}}...

求大神编程一个51单片机的8灯点亮程序。
点亮第一只LED操作为 P1=0xFE,同时点亮第一,二只LED操作为 P1=0xFC,其它可类推。

51单片机的程序,求大神给解释下,具体些
这个程序比较长,但还算简单,哪一段不懂,不可能一句一句解释 void main(){ q=0;\/\/分清0 p=0;\/\/小时清0 TMOD=0x01; \/\/定时器0工作方式1 TH0=(65536-46080)\/256;\/\/50ms初值 TL0=(65536-46080)%256;ET0=1;\/\/定时器0中断打开 EA=1;\/\/总中断打开 while(1){ if(K1==0)\/\/启动 ...

大神,求51单片机做简易计算器的那个c语言程序
以下是我编的简易计算器程序,基本成功 \/\/4*4键盘检测程序,按下键后相应的代码显示在液晶屏上 \/\/显示5位后,第6次显示操作符号 \/\/再显示下一个数 \/\/ 键值与功能对应表 \/\/键值 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 \/\/功能 0 1 2 3 4 5 6 7 8 9 + - × ÷ ...

求大神解释单片机程序。不会啊
\/\/段码扫描程序↓ 管显示的。你知道调用后会有显示就对了。void segscan(){ wei1 = 1;\/\/第一线关 duanport = smgcode[Pre_KeyNo[0]];\/\/送数据。数据来自Pre_KeyNo数组里面的缓存做索引地smgcode数组相应的数据。。呼呼。好累。大小写穿插作死。。delay(10);\/\/延时。。。所以。。我错了。

求一个51单片机C语言程序编程
实验内容:单片机甲、乙进行双机串行通信,甲机通过串口控制乙机LED闪烁(如下图所示,要求利用芯片MAX232),双方的晶振频率均为11.0592MHz(波特率为9600kb\/s)要求:甲机按开关K1一次,发送字符“A”给乙机,点亮灯D1与D2;按开关K1两次,发送字符“B”给乙机,点亮灯D3与D4;按开关K1三次,...

求大神关于51单片机模块化编程问题?
你好:你只要在iic的.c文件中包含iic的.h文件就可以了。另,如果iic的.c文件涉及操作到51中的寄存器,还要包含reg51.h。且,.c和.h文件都要放到编译器所在文件的include下。先试试吧。希望我的回答能帮助到你。

请各位大神帮忙写一条51单片机程序
有问题:1。 一键开机全灭是啥意思?需要确定。2。P1口接灯,是否即接8个灯?需要确定。3。数码管有很多种。需要确定。4。关于接灯,按键,数码管,以何种方式接?共阴还是共阳?需要确定。5. 51单片机有很多种,主要是管脚输出电流有所区别。需要确定。.6。建议:有原理图及相关元器件最好。

求大神帮忙写程序,51单片机,由键盘输入p1,p3.7由ds12b20温度感受器输入...
程序差不多,自己改下口 include<reg52.h> \/\/包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 include <intrins.h> sbit SCK=P3^6;\/\/时钟 sbit SDA=P3^4;\/\/数据 sbit RST = P3^5;\/\/ DS1302复位 sbit LS138A=P2^2;sbit LS138B=P2^3;sbit LS138C=P2^4;bit ReadRTC...

相似回答
大家正在搜