论坛风格切换切换到宽版
  • 4203阅读
  • 11回复

一个绕脑子的学生作业,我看着有点头晕。 [复制链接]

上一主题 下一主题
离线BA6BF
 
发帖
16982
只看楼主 倒序阅读 0楼 发表于: 2009-04-16
谁能用最简短的程序完成?必须用c语言和2051单片机完成,呵呵。

三个检测端口:
a1 a2 a3

四个控制输出端口:
b1 b2 b3 b4

开机:

1,首先置b1,b2,b3,b4为高电平并保持。

2,0.1秒以后,检测a1电平:如果a1检测为“低电平”,则b1,b2输出高电平并保持。如果a1检测为“高电平”,则使b1立刻输出低电平并保持,一直到a1变为“低电平”后,b1立刻输出高电平并保持。

3,0.1秒以后,b2输出低电平并保持,一直到a2“或”a3为低电平后,b2立刻输出高电平并保持。

4,如果a3一直没有呈现低电平,在a2呈现低电平后,b2输出高电平并保持,同时使b3输出低电平并保持。

5,0.1秒以后,b1输出低电平并保持,直到a1成为“低电平”后b1立刻输出高电平并保持。

6,0.1秒以后,b2输出低电平并保持,一直到a2“或”a3为低电平后,b2立刻输出高电平并保持。

7,如果a3一直没有呈现低电平,在a2呈现低电平后,则b2输出高电平并保持,并且b4输出低电平并保持。

8,结束
离线BD6KF
发帖
1126
只看该作者 1楼 发表于: 2009-04-16
6bf老朋友干什么,上面的逻辑随便找个你的学生就可以完成的.不过你的0.1秒要是1个,那就是很难的难题了,你的如果也很难判断.
离线小比尔/5
发帖
2582
只看该作者 2楼 发表于: 2009-04-16
// 时钟频率: 6mhz

#include<at89x52.h>

#define b3      p1_3
#define b2      p1_2
#define b1      p1_1
#define b0      p1_0

#define a2      p3_2
#define a1      p3_1
#define a0      p3_0

void set_tmr0()
{
     th0=0x3c; tl0=0xb0; tf0=0; tr0=1;      // 定时时间:100ms
}

void main()
{
     tmod=0x01; tr0=0;
     p2 = 0x0f;

     set_tmr0(); while(!tf0);      // 第一拍

     set_tmr0();            // 第二拍
     if(!a1)
     {
           b0=1; b1=1;
           while(!tf0);
     }
     else
     {
           b1=0;
           while(!tf0) { if(!a1) b1=1; }
     }

     set_tmr0();            // 第三拍
     b2=0;
     while(!tf0)
     {
           bit a3_flag=0;
           if(!(a2&&a3)) b2=1;
           if(!a3) a3_flag=1;
           if(a3_flag && !a2) b3=0;
     }

     set_tmr0();            // 第四拍
     b1=0;
     while(!tf0)
     {
           if(!a1) b1=1;
     }

     set_tmr0();            // 第五拍
     b2=0;
     while(!tf0)
     {
           bit a3_flag=0;
           if(!(a2&&a3)) b2=1;
           if(!a3) a3_flag=1;
           if(a3_flag && !a2) b4=0;
     }

     while(1);            // 停机,结束
}
离线BA6BF
发帖
16982
只看该作者 3楼 发表于: 2009-04-17
出错了吧?

我说容易绕脑子,都不信,呵呵。
离线汤圆
发帖
1157
只看该作者 4楼 发表于: 2009-04-17
感觉都一样啊 错个位而已 哈哈 楼上真实在 都给写了
离线BA6BF
发帖
16982
只看该作者 5楼 发表于: 2009-04-17
[quote=汤圆]感觉都一样啊 错个位而已 哈哈 楼上真实在 都给写了[/quote]

除了端口声明以外,还有别的错。
离线wycx
发帖
1497
只看该作者 6楼 发表于: 2009-04-17
用户被禁言,该主题自动屏蔽!
离线小比尔/5
发帖
2582
只看该作者 7楼 发表于: 2009-04-17
程序中有个别地方确实是有错误的,但是相信以楼主的水平改起来应该很容易
另外原有表述不准确,文字有歧义
离线BH3NEK
发帖
1519
只看该作者 8楼 发表于: 2009-04-17
请楼主给个正确的学习一下
离线汤圆
发帖
1157
只看该作者 9楼 发表于: 2009-04-17
呵呵 这是一个非常复杂的问题喽 哈哈哈哈哈哈哈哈
离线efree
发帖
554
只看该作者 10楼 发表于: 2009-04-21
'
谁能用最简短的程序完成?必须用c语言和2051单片机完成,呵呵。
三个检测端口:
a1 a2 a3
四个控制输出端口:
b1 b2 b3 b4
开机:
1,首先置b1,b2,b3,b4为高电平并保持。
2,0.1秒以后,检测a1电平:如果a1检测为“低电平”,则b1,b2输出高电平并保持。如果a1检测为“高电平”,则使b1立刻输出低电平并保持,一直到a1变为“低电平”后,b1立刻输出高电平并保持。
3,0.1秒以后,b2输出低电平并保持,一直到a2“或”a3为低电平后,b2立刻输出高电平并保持。
4,如果a3一直没有呈现低电平,在a2呈现低电平后,b2输出高电平并保持,同时使b3输出低电平并保持。
5,0.1秒以后,b1输出低电平并保持,直到a1成为“低电平”后b1立刻输出高电平并保持。
6,0.1秒以后,b2输出低电平并保持,一直到a2“或”a3为低电平后,b2立刻输出高电平并保持。
7,如果a3一直没有呈现低电平,在a2呈现低电平后,则b2输出高电平并保持,并且b4输出低电平并保持。
8,结束
'


很不错的中文版basic程序,还有序号,呵呵。
离线david99
发帖
284
只看该作者 11楼 发表于: 2009-04-28
'
很不错的中文版basic程序,还有序号,呵呵。
'

basic里面是叫的行号,不是叫序号