找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 941|回复: 0
打印 上一主题 下一主题
收起左侧

智能垃圾分类程序 采集6路传感器或者开关量控制6个推杆电机打开对应垃圾桶翻盖

[复制链接]
跳转到指定楼层
楼主





单片机源程序如下:

【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!   
*********************************************************************/
#include "STC8FXX.h"
#include <intrins.H>
#define uchar unsigned char //宏定义字符型变量
#define uint  unsigned int        //宏定义整型变量

/********************************************************************
                            初始定义
*********************************************************************/
uchar keycnt=0;//按下次数值
uint tcnt=0; //键值判断
uint sec1=0;
uint sec2=0;
uint sec3=0;
uint sec4=0;
uint sec5=0;
uint sec6=0;
bit jsbz1=0;
bit jsbz2=0;
bit jsbz3=0;
bit jsbz4=0;
bit jsbz5=0;
bit jsbz6=0;
bit ysbz1=0;//计时标志
bit flag;
bit bz1=0;
bit bz2=0;
bit bz3=0;
bit bz4=0;
bit bz5=0;
bit bz6=0;
uint bjz=0;//设置报警值
uint bjz1=0;//设置报警值
//sfr WDT_CONTR=0XC1;                    //看门狗设置寄存器

uchar tcnt1=0;//定时器计时
uchar ysec1=0;
bit ykjsbz=0;//遥控计时标志
bit ykbz1=0;//遥控按键1标志
bit ykbz2=0;//遥控按键2标志
bit ykbz3=0;//遥控按键3标志
bit ykbz4=0;//遥控按键4标志
bit ykbz5=0;//遥控按键5标志
bit ykbz6=0;//遥控按键6标志
bit ykbz7=0;//遥控按键7标志
bit ykbz8=0;//遥控按键8标志
bit ykbz9=0;//遥控按键9标志
bit ykbz10=0;//遥控按键10标志
bit ykbz11=0;//遥控按键11标志
bit ykbz12=0;//遥控按键12标志

/********************************************************************
                            I/O定义
*********************************************************************/
sbit OUT1=P4^2;         //继电器输出控制端
sbit OUT2=P4^1;         //继电器输出控制端
sbit OUT3=P3^7;         //继电器输出控制端
sbit OUT4=P3^6;         //继电器输出控制端
sbit OUT5=P3^5;         //继电器输出控制端
sbit OUT6=P3^4;         //继电器输出控制端
sbit OUT7=P3^3;         //继电器输出控制端
sbit OUT8=P3^2;         //继电器输出控制端
sbit OUT9=P4^7;         //继电器输出控制端
sbit OUT10=P4^6;         //继电器输出控制端
sbit OUT11=P4^5;         //继电器输出控制端
sbit OUT12=P1^7;         //继电器输出控制端

sbit IN1=P1^2;         //输入端
sbit IN2=P1^3;         //输入端
sbit IN3=P1^4;         //输入端
sbit IN4=P4^4;         //输入端
sbit IN5=P1^5;         //输入端
sbit IN6=P1^6;         //输入端

/*遥控使用0^7,P0^6,P0^5,P0^4;   */
sbit YK0=P0^7;                  
sbit YK1=P0^6;
sbit YK2=P0^5;
sbit YK3=P0^4;
/********************************************************************
                          延时函数
*********************************************************************/
void delay(uchar t)//延时程序
{
uchar m,n,s;
for(m=t;m>0;m--)
for(n=2;n>0;n--)
for(s=248;s>0;s--);
}
/********************************************************************
                          定时器T0初始化
*********************************************************************/
void timer0_init()
{
    TMOD=0x02; //定时器工作在方式2
        TH0=0x06; //对TH0 TL0 赋值
        TL0=0x06;
        TR0=1; //开始定时
        ET0=1;
        EA=1;
}
/********************************************************************
                            时间设置函数
*********************************************************************/
void key()
{
//P2=0XFF;
//bjz1=~P2;
//bjz=bjz1*10;
//bjz=100;
if((P20==1)&&(P21==1)&&(P22==1)&&(P23==1)){bjz=20;}//2秒   15
if((P20==0)&&(P21==1)&&(P22==1)&&(P23==1)){bjz=40;}//3秒   14
if((P20==1)&&(P21==0)&&(P22==1)&&(P23==1)){bjz=60;}//6秒   13
if((P20==0)&&(P21==0)&&(P22==1)&&(P23==1)){bjz=80;}//8秒   12
if((P20==1)&&(P21==1)&&(P22==0)&&(P23==1)){bjz=100;}//10秒 11
if((P20==0)&&(P21==1)&&(P22==0)&&(P23==1)){bjz=120;}//12秒 10
if((P20==1)&&(P21==0)&&(P22==0)&&(P23==1)){bjz=140;}//14秒 9
if((P20==0)&&(P21==0)&&(P22==0)&&(P23==1)){bjz=160;}//16秒 8
if((P20==1)&&(P21==1)&&(P22==1)&&(P23==0)){bjz=180;}//18秒 7
if((P20==0)&&(P21==1)&&(P22==1)&&(P23==0)){bjz=200;}//20秒 6
if((P20==1)&&(P21==0)&&(P22==1)&&(P23==0)){bjz=220;}//22秒 4
if((P20==0)&&(P21==0)&&(P22==1)&&(P23==0)){bjz=240;}//24秒 4
if((P20==1)&&(P21==1)&&(P22==0)&&(P23==0)){bjz=260;}//26秒 3
if((P20==0)&&(P21==1)&&(P22==0)&&(P23==0)){bjz=280;}//28秒 2
if((P20==1)&&(P21==0)&&(P22==0)&&(P23==0)){bjz=300;}//30秒 1
if((P20==0)&&(P21==0)&&(P22==0)&&(P23==0)){bjz=320;}//32秒 0
}

/********************************************************************
                            遥控函数
*********************************************************************/
void KEY_YK()
{


if((YK0==1)&&(YK1==0)&&(YK2==0)&&(YK3==0)){delay(3);if((YK0==1)&&(YK1==0)&&(YK2==0)&&(YK3==0)){jsbz1=0;sec1=0;ysec1=0;tcnt1=0;if(ykbz1==0){OUT1=!OUT1;OUT2=1;}ykbz1=1;ykjsbz=0;}}//1
if((YK0==0)&&(YK1==1)&&(YK2==0)&&(YK3==0)){delay(3);if((YK0==0)&&(YK1==1)&&(YK2==0)&&(YK3==0)){jsbz1=0;sec1=0;ysec1=0;tcnt1=0;if(ykbz2==0){OUT1=1;OUT2=!OUT2;}ykbz2=1;ykjsbz=0;}}//2
if((YK0==1)&&(YK1==1)&&(YK2==0)&&(YK3==0)){delay(3);if((YK0==1)&&(YK1==1)&&(YK2==0)&&(YK3==0)){jsbz2=0;sec2=0;ysec1=0;tcnt1=0;if(ykbz3==0){OUT3=!OUT3;OUT4=1;}ykbz3=1;ykjsbz=0;}}//3
if((YK0==0)&&(YK1==0)&&(YK2==1)&&(YK3==0)){delay(3);if((YK0==0)&&(YK1==0)&&(YK2==1)&&(YK3==0)){jsbz2=0;sec2=0;ysec1=0;tcnt1=0;if(ykbz4==0){OUT3=1;OUT4=!OUT4;}ykbz4=1;ykjsbz=0;}}//4
if((YK0==1)&&(YK1==0)&&(YK2==1)&&(YK3==0)){delay(3);if((YK0==1)&&(YK1==0)&&(YK2==1)&&(YK3==0)){jsbz3=0;sec3=0;ysec1=0;tcnt1=0;if(ykbz5==0){OUT5=!OUT5;OUT6=1;}ykbz5=1;ykjsbz=0;}}//5
if((YK0==0)&&(YK1==1)&&(YK2==1)&&(YK3==0)){delay(3);if((YK0==0)&&(YK1==1)&&(YK2==1)&&(YK3==0)){jsbz3=0;sec3=0;ysec1=0;tcnt1=0;if(ykbz6==0){OUT5=1;OUT6=!OUT6;}ykbz6=1;ykjsbz=0;}}//6

if((YK0==1)&&(YK1==1)&&(YK2==1)&&(YK3==0)){delay(3);if((YK0==1)&&(YK1==1)&&(YK2==1)&&(YK3==0)){jsbz4=0;sec4=0;ysec1=0;tcnt1=0;if(ykbz7==0){OUT7=!OUT7;OUT8=1;}ykbz7=1;ykjsbz=0;}}//7
if((YK0==0)&&(YK1==0)&&(YK2==0)&&(YK3==1)){delay(3);if((YK0==0)&&(YK1==0)&&(YK2==0)&&(YK3==1)){jsbz4=0;sec4=0;ysec1=0;tcnt1=0;if(ykbz8==0){OUT7=1;OUT8=!OUT8;}ykbz8=1;ykjsbz=0;}}//8
if((YK0==1)&&(YK1==0)&&(YK2==0)&&(YK3==1)){delay(3);if((YK0==1)&&(YK1==0)&&(YK2==0)&&(YK3==1)){jsbz5=0;sec5=0;ysec1=0;tcnt1=0;if(ykbz9==0){OUT9=!OUT9;OUT10=1;}ykbz9=1;ykjsbz=0;}}//9
if((YK0==0)&&(YK1==1)&&(YK2==0)&&(YK3==1)){delay(3);if((YK0==0)&&(YK1==1)&&(YK2==0)&&(YK3==1)){jsbz5=0;sec5=0;ysec1=0;tcnt1=0;if(ykbz10==0){OUT9=1;OUT10=!OUT10;}ykbz10=1;ykjsbz=0;}}//10
if((YK0==1)&&(YK1==1)&&(YK2==0)&&(YK3==1)){delay(3);if((YK0==1)&&(YK1==1)&&(YK2==0)&&(YK3==1)){jsbz6=0;sec6=0;ysec1=0;tcnt1=0;if(ykbz11==0){OUT11=!OUT11;OUT12=1;}ykbz11=1;ykjsbz=0;}}//11
if((YK0==0)&&(YK1==0)&&(YK2==1)&&(YK3==1)){delay(3);if((YK0==0)&&(YK1==0)&&(YK2==1)&&(YK3==1)){jsbz6=0;sec6=0;ysec1=0;tcnt1=0;if(ykbz12==0){OUT11=1;OUT12=!OUT12;}ykbz12=1;ykjsbz=0;}}//12

if((YK0==0)&&(YK1==0)&&(YK2==0)&&(YK3==0))
{
delay(100);
if((YK0==0)&&(YK1==0)&&(YK2==0)&&(YK3==0)){ykjsbz=1;}//按键谈起
}

}
/********************************************************************
                            主函数
*********************************************************************/
void main()
{  
P0M1 = 0;   P0M0 = 0;   //设置为准双向口
P1M1 = 0;   P1M0 = 0;   //设置为准双向口
P2M1 = 0;   P2M0 = 0;   //设置为准双向口
P3M1 = 0;   P3M0 = 0;   //设置为准双向口
P4M1 = 0;   P4M0 = 0;   //设置为准双向口
P5M1 = 0;   P5M0 = 0;   //设置为准双向口
P6M1 = 0;   P6M0 = 0;   //设置为准双向口
P7M1 = 0;   P7M0 = 0;   //设置为准双向口
OUT1=1;
OUT2=1;
OUT3=1;
OUT4=1;
OUT5=1;
OUT6=1;
OUT7=1;
OUT8=1;
OUT9=1;
OUT10=1;
OUT11=1;
OUT12=1;
timer0_init();

while(1)
{
key();
KEY_YK();
if((IN1==0)&&(bz1==0)){delay(3);if(IN1==0){jsbz1=0;sec1=0;OUT1=0;OUT2=1;bz1=1;}}  if((IN1==1)&&(bz1==1)){delay(10);if(IN1==1){if(IN1==1){jsbz1=1;sec1=0;bz1=0;}}}
if((IN2==0)&&(bz2==0)){delay(3);if(IN2==0){jsbz2=0;sec2=0;OUT3=0;OUT4=1;bz2=1;}}  if((IN2==1)&&(bz2==1)){delay(10);if(IN2==1){if(IN2==1){jsbz2=1;sec2=0;bz2=0;}}}
if((IN3==0)&&(bz3==0)){delay(3);if(IN3==0){jsbz3=0;sec3=0;OUT5=0;OUT6=1;bz3=1;}}  if((IN3==1)&&(bz3==1)){delay(10);if(IN3==1){if(IN3==1){jsbz3=1;sec3=0;bz3=0;}}}
if((IN4==0)&&(bz4==0)){delay(3);if(IN4==0){jsbz4=0;sec4=0;OUT7=0;OUT8=1;bz4=1;}}  if((IN4==1)&&(bz4==1)){delay(10);if(IN4==1){if(IN4==1){jsbz4=1;sec4=0;bz4=0;}}}
if((IN5==0)&&(bz5==0)){delay(3);if(IN5==0){jsbz5=0;sec5=0;OUT9=0;OUT10=1;bz5=1;}} if((IN5==1)&&(bz5==1)){delay(10);if(IN5==1){if(IN5==1){jsbz5=1;sec5=0;bz5=0;}}}
if((IN6==0)&&(bz6==0)){delay(3);if(IN6==0){jsbz6=0;sec6=0;OUT11=0;OUT12=1;bz6=1;}}if((IN6==1)&&(bz6==1)){delay(10);if(IN6==1){if(IN6==1){jsbz6=1;sec6=0;bz6=0;}}}

        
}
}

/********************************************************************
                            定时中断服务函数
*********************************************************************/
void t0(void) interrupt 1 using 0 //定时中断服务函数
{
tcnt++; //每过250ust tcnt 加一
tcnt1++; //每过250ust tcnt 加一
if(tcnt1==10) //计满400 次(1/10 秒)时
{
tcnt1=0; //重新再计
if(ykjsbz==1)
{
ysec1++;
if(ysec1==50){ykbz1=0;ykbz2=0;ykbz3=0;ykbz4=0;ykbz5=0;ykbz6=0;ykbz7=0;ykbz8=0;ykbz9=0;ykbz10=0;ykbz11=0;ykbz12=0;ykjsbz=0;ysec1=0;}
}

}
if(tcnt==400) //计满400 次(1/10 秒)时
{
tcnt=0; //重新再计
if(jsbz1==1){sec1++;if(sec1>=bjz){OUT1=1;OUT2=0;}if(sec1>=600){OUT1=1;OUT2=1;sec1=0;jsbz1=0;}}
if(jsbz2==1){sec2++;if(sec2>=bjz){OUT3=1;OUT4=0;}if(sec2>=600){OUT3=1;OUT4=1;sec2=0;jsbz2=0;}}
if(jsbz3==1){sec3++;if(sec3>=bjz){OUT5=1;OUT6=0;}if(sec3>=600){OUT5=1;OUT6=1;sec3=0;jsbz3=0;}}
if(jsbz4==1){sec4++;if(sec4>=bjz){OUT7=1;OUT8=0;}if(sec4>=600){OUT7=1;OUT8=1;sec4=0;jsbz4=0;}}
if(jsbz5==1){sec5++;if(sec5>=bjz){OUT9=1;OUT10=0;}if(sec5>=600){OUT9=1;OUT10=1;sec5=0;jsbz5=0;}}
if(jsbz6==1){sec6++;if(sec6>=bjz){OUT11=1;OUT12=0;}if(sec6>=600){OUT11=1;OUT12=1;sec6=0;jsbz6=0;}}
}
}

/********************************************************************
                              结束
*********************************************************************/

原理图: 无
仿真: 无
代码: keil.rar (54.56 KB, 下载次数: 12)
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表