51单片机编程 20

利用物料分拣装置实现以下功能1开机不动,数码管显示00数值2按下K1,滑槽上升(不限位)3检测非金属物料并计数后在数码管上实时显示(十进制)4如果计数值满10后滑槽下降初... 利用物料分拣装置实现以下功能
1开机不动,数码管显示00数值
2按下K1,滑槽上升(不限位)
3检测非金属物料并计数后在数码管上实时显示(十进制)
4如果计数值满10后滑槽下降初始位
展开
 我来答
Seneal
2013-11-21 · 超过22用户采纳过TA的回答
知道答主
回答量:46
采纳率:0%
帮助的人:62.7万
展开全部

51编程得看外部电路的连接情况。没有电路图,木有办法写。。。

  1. 数码管和单片机之间的电路有很多种,你这种就用译码器,74138就行。假设单片机p1口用作数码管输出。

  2. 滑槽电路也不清楚,假设一个电机,用的是P2^0,P2^1(顺时针一个口,逆时针一个口)

  3. 检测非金属物料的电路用的是P2^3

   4. 按键电路用的是P3口

代码就不贴了,说下思路。

开机初始化,给单片机所有引脚置零,然后设置数码管显示(2位十进制数显示至少需要7个引脚,你这里只需要用4个引脚)。

按键处理,编程中需要注意的地方就是机械开关的抖动消除,当然,如果有硬件消抖电路就不用管了。假设k1用的是P3^1口,那么只需要判断P3^1==1为真,就可以拉高P2^0或P2^1口电压,直接P2^0=1就ok。

检测非金属物电路:检测到一个非金属物料,此电路就给单片机P2^3发送一个脉冲信号。

单片机这边,主循环里检测P2^3口的电平,用一个变量oldState来保存上一个状态。用count来保存非金属物料个数

if(oldState!=P2^3){

    count++;

    oldState=P^3;

}

计数值满10后滑槽下降初始位:

if(count==10){

    P2^0==0;

    P2^1==1;

    count=0;

}



当然,如果电路还没做的话,我推荐一个电路,这个电路编程更简单,效率更高。

还是假设非金属检测电路一旦检测到非金属就发出一个脉冲信号。

将非金属检测电路同一个计数器(计数器可以买现成芯片,也可以自己用触发器做)的输入端连接。计数器同数码管通过译码器连接。

单片机P1口同计数器输出端连接。单片机同计数器清零端连接。

单片机同滑槽连接。

单片机同键盘连接。

这个电路就只需要读计数器的值,不用控制数码管。

单片机启动时向计数器清零端发出清零信号,那么数码管就显示00

单片机程序主循环判断计数器的值,若为10,那么向计数器清零端发出清零信号;控制滑槽下降。

单片机程序主循环判断键盘的值,若K1按下,控制滑槽上升。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式