51单片机编程 20
1开机不动,数码管显示00数值
2按下K1,滑槽上升(不限位)
3检测非金属物料并计数后在数码管上实时显示(十进制)
4如果计数值满10后滑槽下降初始位 展开
51编程得看外部电路的连接情况。没有电路图,木有办法写。。。
数码管和单片机之间的电路有很多种,你这种就用译码器,74138就行。假设单片机p1口用作数码管输出。
滑槽电路也不清楚,假设一个电机,用的是P2^0,P2^1(顺时针一个口,逆时针一个口)
检测非金属物料的电路用的是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按下,控制滑槽上升。