终于自学单片机开发,写了这个猫洁易智能外扩程序,免清洁液永久清洗,在2017-10月我购买的时候,以为可以很放心去旅游,旅游一周回来,发现机器没清洗,猫屎堆满机器盆,顿时感到很讨厌,花了钱居然得不到相应的服务,机器还在告警,询问客服说是清洁液用完了就不工作,原来这是款霸王绑定销售,而销售宣传中丝毫不提有这种限制?!而且该机器销售宣传说是把5年买猫砂土的钱投资在他的机器上更便宜,猫砂是水洗可反复使用的,结果他这机器不但要清洗液限制机器工作,从消耗猫砂与清洁液算一下比其他的消费更贵,这是欺骗客户的卑鄙行径.
于是查看网上有人用过这机器后来拆除不用了,那是他实在没办法,也有人到处打听如何破解清洗液,我呢是软硬兼施的,机器到我手,他们挺SB的设计根本就没用,我想怎么改造就怎么办,目前用单片机设计组织清洗整过程的运行逻辑已经成功,机器不再受清洁液限制,可以永久工作,哪怕没有清洁液,一样可以水洗,从此可以无忧旅游,倘若有一天其机器内的控制板坏掉,我还可以用单片机全部替换,重新按自己的思路设计控制清洗运行逻辑,用他们这台机器的硬件,说实话,这个机器硬件设计挺巧妙的,除了那SB霸王的清洗液控制.
另有位同样养猫买这种机器的人说,他现在用超市买2元多一斤的坏米当猫砂用,我觉得不错,同样是摆脱绑定销售的方法.
完成智能外扩更使我轻松和得意,从此不用再听家里女人关于猫洁易这机器的唠叨了,有女人的幸福就是听她的唠叨,然后奋发学习,设计出智能外扩,从此扬眉吐气,亦可在家里女人面前吹牛了.
这是我第一个用C写的51单片机程序:
#include "reg52.h"
//#include<intrins.h>
typedef unsigned int u16;
typedef unsigned char u8;
sbit xuan_ze = P1^2;
sbit zhi_xin = P1^3;
sbit dian_yuan = P1^4;
sbit wei = P2^7;
sbit duan = P2^6;
sbit beep = P2^3;
u8 code duan_xuan_biao[] =
{//数码管段选表0-9ABCDEFGHJLNOPTUVY.
0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F, //"9"
0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71, 0X3d, 0x76, 0x0e, 0x38, //"L"
0x37, 0x5C, 0x73, 0X31, 0x1c, 0x3e, 0x6e, 0x40, 0X80, 0X49, //""
0X48, 0X08, 0X01, 0X41, 0X40, 0X24, 0X36, 0X12, 0X52, 0X64, //""
0X70, 0X46, 0x00 //熄灭
};
u8 shu_ma_wei_biao[] =
{//数码位表1-8位,数码管低电平亮,电路板上从左到右为1-8数码管
//如要第8位亮则8位电平:0111 1111,如要第一位亮则8位电平:1111 1110
0x00,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f
};
//unsigned char code KeyCodeMap[4][4] = { //矩阵按键编号到标准键盘键码的映射表
// { 0x31, 0x32, 0x33, 0x26 }, //数字键1、数字键2、数字键3、向上键
// { 0x34, 0x35, 0x36, 0x25 }, //数字键4、数字键5、数字键6、向左键
// { 0x37, 0x38, 0x39, 0x28 }, //数字键7、数字键8、数字键9、向下键
// { 0x30, 0x1B, 0x0D, 0x27 } //数字键0、ESC 键、 回车键、 向右键
//};
void shu_ma_duan(u8 i)
{
duan = 1;
P0 = duan_xuan_biao[i];
duan = 0;
}
void shu_ma_wei(u8 i)
{
wei = 1;
P0 = i;
wei = 0;
}
void din_shi_chu_zhi()
{
TH0 = (65535-46082)/256; /*设置初始值,定时50MS 11.059晶振*/
TL0 = (65535-46082)%256;
// TH0 = (65536-9174)/256; /*设置初始值,定时10MS 11.059晶振*/
// TL0 = (65536-9174)%256;
// TH0 = 0X4b; /*给定时器赋初值,定时50ms,11M晶震*/
// TL0 = 0Xfe;
// TH0 = 0XFC; /*给定时器赋初值,定时1ms,12M晶震*/
// TL0 = 0X18;
// TH0 = 0x3C; /*设置初始值,定时50MS,12M晶震*/
// TL0 = 0xB0;
}
void din_shi_she_zhi()
{
TMOD = 0X01; //选择为定时器0模式,工作方式1,仅用TR0打开启动。
din_shi_chu_zhi(); //设置初始值,定时50MS,12M晶震
//EA = 1; //打开总中断
//ET0 = 1; //打开定时器0中断
TR0 = 1; //启动定时器0
}
void yan_shi_us(u8 i)
{
// while(i--);
u8 x,y;
for(x = i; x > 0; x--)
for(y = 114; y > 0 ; y--);
}
void yan_shi_MS(u16 i)
{
u8 miao = 0, fen = 0, m = 0, f = 0;
while(i)
{
if(TF0==1)
{
TF0 = 0;
din_shi_chu_zhi();
i--; miao++;
}
if(miao == 20)
{
miao = 0; fen++;
shu_ma_wei(0xf7);
shu_ma_duan((++m)%30);
}
if(fen == 60)
{
fen = 0;
shu_ma_wei(0xfb);
shu_ma_duan((++f)%30);
}
}
}
void an_niu(u8 i, u8 x)
{
u8 x_z_i = 1, z_x_i = 1;
while(i--)
{
if(x == 1)
{
zhi_xin = 0;
shu_ma_wei(shu_ma_wei_biao[2]);
shu_ma_duan(x_z_i++);
}
else
{
xuan_ze = 0;
shu_ma_wei(shu_ma_wei_biao[1]);
shu_ma_duan(z_x_i++);
}
if(x_z_i == 10)x_z_i = 0;
if(z_x_i == 10)z_x_i = 0;
yan_shi_MS(9);
xuan_ze = 1;
zhi_xin = 1;
beep = 0;
yan_shi_MS(9);
beep = 1;
}
}
void XuanZhe_ZhiXin(u8 x, u8 z)
{
an_niu(x,0);
an_niu(z,1);
}
void chan_dou_dong(u8 i)
{
an_niu(2,1);
yan_shi_MS(100);
an_niu(2,1);
yan_shi_MS(100);
an_niu(2,1);
yan_shi_MS(i);
an_niu(1,1);
}
void qing_xi_you_hua()
{
XuanZhe_ZhiXin(5,3);
yan_shi_MS(300);
an_niu(1,1);
XuanZhe_ZhiXin(1,3);
yan_shi_MS(7920);
XuanZhe_ZhiXin(7,1);
yan_shi_MS(160);
an_niu(2,1);
yan_shi_MS(100);
chan_dou_dong(250);
XuanZhe_ZhiXin(4,1);
yan_shi_MS(2400);
an_niu(1,1);
}
void zhuan_pan_zheng_fan(u16 i, u16 x)
{
u8 j = 3;
yan_shi_MS(i);
while(j--){
an_niu(2,1);
yan_shi_MS(x);
an_niu(2,1);
yan_shi_MS(i);
}
}
void ce_shi_mo_shi()
{
xuan_ze = 0;
zhi_xin = 0;
yan_shi_MS(150);
xuan_ze = 1;
zhi_xin = 1;
yan_shi_MS(150);
}
void Hong_Gan()
{
dian_yuan = 0;
yan_shi_MS(100);
dian_yuan = 1;
ce_shi_mo_shi();
XuanZhe_ZhiXin(5,1);
XuanZhe_ZhiXin(3,3);
yan_shi_MS(180);
XuanZhe_ZhiXin(1,1);
zhuan_pan_zheng_fan(3750, 600);
XuanZhe_ZhiXin(7,1);
yan_shi_MS(30);
an_niu(1,1);
XuanZhe_ZhiXin(5,1);
XuanZhe_ZhiXin(4,1);
zhuan_pan_zheng_fan(1950, 600);
XuanZhe_ZhiXin(7,1);
yan_shi_MS(30);
an_niu(1,1);
XuanZhe_ZhiXin(5,1);
XuanZhe_ZhiXin(4,1);
zhuan_pan_zheng_fan(1050, 600);
}
void main()
{
u8 hmq = 0;
din_shi_she_zhi();
ce_shi_mo_shi();
XuanZhe_ZhiXin(2,1);
an_niu(1,0);
qing_xi_you_hua();
XuanZhe_ZhiXin(6,1);
XuanZhe_ZhiXin(1,1);
yan_shi_MS(600);
an_niu(1,1);
qing_xi_you_hua();
XuanZhe_ZhiXin(6,1);
an_niu(1,0);
qing_xi_you_hua();
Hong_Gan();
Hong_Gan();
XuanZhe_ZhiXin(7,1);
yan_shi_MS(120);
an_niu(2,1);
yan_shi_MS(120);
chan_dou_dong(260);
XuanZhe_ZhiXin(5,1);
XuanZhe_ZhiXin(4,1);
while(1)
{
shu_ma_wei(shu_ma_wei_biao[6]);
shu_ma_duan(14);
yan_shi_us(2);
shu_ma_wei(shu_ma_wei_biao[7]);
shu_ma_duan(20);
yan_shi_us(2);
shu_ma_wei(shu_ma_wei_biao[8]);
shu_ma_duan(13);
yan_shi_us(2);
if(hmq) beep = 1;
else { beep = 0; yan_shi_MS(100); hmq++;}
}
}
智能外扩工作描述:
1.三次清洗过程:
第一次为进水并把猫屎铲除的清洗,第二次为加清洁液的清洗,第三次洁净的清洗;
机器原来的铲猫屎是干的时候铲,发现这种方法猫砂损耗非常大,改用进水后铲猫屎,可以减少猫砂损耗.
同时延长了三次清洗过程的时间,洗得更干净没异味,原来机器使用中发现机器没工作时靠近就有异味,机器工作时异味更大,尤其烘干阶段,这种情况网络上查看别人也这么说,甚至有人因此批评该机器和不用该机器.
2.三次烘干过程:由于采用了别人的方法,用便宜的口感差的坏米替换猫砂,我觉得这方法确实很好,因为,米是纯天然的,不会造成环境污染,而且很便宜,更重要的是猫吃了也不担心会生病,给猫看一次病,都得千元左右,给猫治病有时比人花钱更多;
猫砂会夹在猫脚趾间,猫会去舔食,因为猫不会吐出来,所以会都吃掉,毕竟机器原来的猫砂是化学品,就算他们称无毒,不免也有所担心,时间长了会不会对猫有害?就算他们称猫砂是可降解的,但毕竟还是化学品.
改变了猫砂用品用米充当,米是可以短期水泡的,而且是易碎的,因此,烘干就要特别处理,米才能多次使用,否则,米会被水泡软化的,猫刨的时候更容易碎化,从而使米消耗更快,设计时充分考虑这点因素,因此加长烘干时间,确保米材料被彻底烘干,务使彻底干燥,而且现在靠近机器不再有异味,还有一股米的味道,机器烘干时也不再有很大异味飘进房间.
3.清洁液与猫砂的更多自主制作与选择.
从此清洁液自配采用纯天然植物材料制作,猫砂采用更多可替换的纯天然植物材料,永久避开人工化学制品,更加心安.
4.结合WIFI电源插座,更是升级到用手机即可控制机器工作,随心所欲设定机器工作次数与时间,不再受原来机器程序设定的局限.
自上周智能外扩弄好,加入米后,这些天发现猫恋上了它的厕所,老在垫盘上睡觉
醒来后伸懒腰,又躺着不动
我去阳台猫来跟我走,我回房间后,猫又回到垫盘上坐着.
2018-6-21外出旅游5天回家,发现机器工作正常,没砂没清洁液的也很干净.太爽了,哈哈哈
还有就是告诉我家属,任何时候都可以启动机器进行清洗,我家属常在水池洗,发现她常启动机器清洗.