标题:
12864液晶屏显示各种传感器
[打印本页]
作者:
daming
时间:
2014-12-29 20:40
标题:
12864液晶屏显示各种传感器
本帖最后由 daming 于 2014-12-29 20:41 编辑
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
#define jian P1
sbit bf=P0^7;
sbit lcd_rs=P2^6;
sbit lcd_rw=P2^5;
sbit lcd_e=P2^4;
sbit lcd_reset=P2^7;
sbit lihe=P2^0;
sbit shache=P2^1;
sbit ge=P3^2;
sbit sj_p33=P3^3;
sbit zhengfan=P3^4;
bit aj_1,zd_1,jin_1,song_1,ti_1,tj_1;
uint gaodu_0,gaodu_1,shiji_0,cishu;
uchar shiling,ms,sj_s,sj_j;
uchar code hz_bj1[]={"计数传感器无信号"};
uchar code hz_bj2[]={"方向传感信号无 "};
uchar code hz_bj3[]={"检测到反转超限 "};
uchar code hz_bj4[]={"检测到正转超限 "};
uchar code hz_bj5[]={"过紧或传感器失灵"};
uchar code hz_kong[]={" "};
uchar code zzzk[]={"欢迎使用职专智控"};
uchar code csh[]={"正在初始化。。。"};
uchar code qqh[]={"qq:000000"};
uchar code hz_t[]={"态:"};
uchar code hz_gs[]={"过松"};
uchar code hz_gj[]={"过紧"};
uchar code hz_tz[]={"停"};
uchar code hz_z[]={"智"};
uchar code hz_jing[]={"警"};
uchar code hz_tg[]={"提高"};
uchar code hz_lh[]={"离合"};
uchar code tb_1[]={"●"};
uchar code tb_2[]={"○ "};
uchar code hz_sheng[]={"升"};
uchar code hz_jiang[]={"降"};
uchar code hz_sc[]={"刹车"};
uchar rem[]={0,0,1,0};
uchar rem_cs[]={0,0,0,0};
uchar rem_1[]={0,0};
uchar rem_sj[]={0,0};
uchar rem_gd1[]={0,0,0,0};
uchar code bcd[]={"0123456789"};
/////////////
yanshi(uint t)
{
uint i,j;
for(i=0;i<t;i++)
{
for(j=0;j<110;j++);
}
}
//////////////////////
yanshi1(uint t)
{
while(t--);
}
///////////////////////////
fuwei()
{yanshi(5);
lcd_reset=0;
yanshi(5);
lcd_reset=1;
}
///////////////////////////
xie_lcd(bit ly,uchar shuju_lcd)
{
lcd_rs=ly;
lcd_rw=0;
lcd_e=0;
P0=shuju_lcd;
yanshi(5);
lcd_e=1;
yanshi(5);
lcd_e=0;
}
/////////////////////////////
/////////////////////////////
lcd_zuobiao(uchar x,uchar y)
{
uchar temp;
if(x==0)
{x=0x80;}
if(x==1)
{x=0x90;}
if(x==2)
{x=0x88;}
if(x==3)
{x=0x98;}
temp=x+y;
xie_lcd(0,temp);
}
///////////////////////////
xiehz(uchar xx,uchar yy,uchar code *chn)
{
uchar i;
lcd_zuobiao(xx,yy);
i=0;
while(chn[i]!='\0')
{
xie_lcd(1,chn[i]);
i++;
}
}
///////////////////////////
xiesz(uchar xx,uchar yy,uchar wei,uchar *chn)
{
uchar i;
lcd_zuobiao(xx,yy);
for(i=0;i<wei;i++)
{
xie_lcd(1,bcd[chn[i]]);
}
}
///////////////////////////
///////////////////////////
xieping_1()
{
xiehz(0,0,hz_t);
xiehz(0,4,hz_tg);
xiehz(1,0,hz_lh);
xiehz(2,0,hz_sc);
}
///////////////////////////
chushihua_p()
{
xie_lcd(0,0x30);
xie_lcd(0,0x0c);
xie_lcd(0,0x01);
xiehz(0,0,zzzk);
//xiehz(2,0,csh);
xiehz(3,2,qqh);
yanshi(2000);
xie_lcd(0,0x01);
xieping_1();
xiehz(0,2,hz_tz);
xiesz(0,6,4,rem);
}
///////////////////////////
////////////////////停机,离合器离开,同时刹车刹住
ting()
{
fuwei();
chushihua_p();
lihe=1;
EA=0;
TR1=0;
EX0=0;EX1=0;
zd_1=0;
ms=0;
xiehz(0,2,hz_tz);
xiehz(1,2,tb_2);
xiehz(2,2,tb_2);
//shache=0;//xiesz(3,0,4,rem_gd1);shiling=0;
}
///////////////////
sd_lh()
{
if(~zd_1)
{
while(jian==0xf7)lihe=0;
lihe=1;
}
}
///////////////
sd_sc()
{
if(~zd_1)
{
while(jian==0xfb)shache=0;
shache=1;
}
}
/////////////////////
shujuchuli_0()
{
uint shuju;
shuju=gaodu_0-200;
rem[1]=shuju%1000/100;
rem[2]=shuju%100/10;
rem[3]=shuju%10;
xiesz(0,6,4,rem);
//if(gaodu_1>=200)
//{
shuju=gaodu_1;//-200;
rem_gd1[1]=shuju%1000/100;
rem_gd1[2]=shuju%100/10;
rem_gd1[3]=shuju%10;
xiesz(3,0,4,rem_gd1);
// }
shuju=cishu;
rem_cs[1]=shuju%1000/100;
rem_cs[2]=shuju%100/10;
rem_cs[3]=shuju%10;
xiesz(3,6,4,rem_cs);
}
/////////////////////
/////////////提低//////////////////////////////////
tidi()
{
if(gaodu_0>210)gaodu_0--;
}
//////提高
tigao()
{
gaodu_0++;
}
///////////////
///////////////////
///////////////////自动
zidong()
{
if(ms==0)if(zd_1==0)
{
ms=1;
xiehz(0,2,hz_z);
shiling=0;
gaodu_1=200;
TMOD=0x10;
ET1=1;
TH1=0;TL1=0;TR1=1;
zd_1=1;
shache=1;
lihe=0;
ti_1=1; // //提升标志致一
IT0=1;//负跳变有效
EX0=1;//开外int0中断
IT1=1;//负跳变有效
//EX1=1;//开外int1中断
EA=1;
}
}
///////////////////键盘
jianpan()
{
uchar jianma;
jian=0xff;
if(jian==0xff)aj_1=1;
else{
yanshi1(50);
if(jian==0xff)return;
if(aj_1)
{
jianma=jian&0xff;
aj_1=0;
switch(jianma)
{
case 0x7f:
{
zd_1=0;
if(ms==2)ting();
}
break;
case 0xbf:zidong();break;
case 0xdf:tidi();break;
case 0xef:tigao();break;
case 0xf7:sd_lh();break;
case 0xfb:sd_sc();break;
case 0xfd:jin_1=1;break;
case 0xfe:song_1=1;break;
}
}
}
}
///////////////////////////
chushihua_jiqi()
{
lihe=1;
shache=1;
gaodu_0=230;
gaodu_1=200;
shiji_0=203;
cishu=0;
PX0=1;
shujuchuli_0();
}
///////////////////////////////////
jing()
{
ms=2;
shiling=0;
gaodu_1=200;
xiehz(0,2,hz_jing);
xiehz(1,2,tb_2);
while(ms==2)
{
EX0=0;
lihe=1;
jianpan();
}
xieping_1();
ting();
xiehz(3,0,hz_kong);
}
///////////////////////////////////
guole()
{
EA=0;TR1=0;EX0=0;EX1=0;lihe=1;zd_1=0;
jing();
}
////////////////////////////////
baoxian() interrupt 3
{
TH1=0;
TL1=0;
shiling++;
if(shiling>200)
{
EA=0;TR1=0;EX0=0;EX1=0;lihe=1;zd_1=0;
xiehz(3,0,hz_bj1);
jing();
}
}
//////////////////////////
///////////////////////////
void main(void)
{
lihe=1;shache=1; //
fuwei(); //屏幕复位
chushihua_p(); //初始化屏
chushihua_jiqi(); ///初始化机器
while(1)
{
if(~zd_1)lihe=1; //不是自动模式离合松
shujuchuli_0(); //数据处理
jianpan();
if(lihe){xiehz(1,2,tb_2);xiehz(1,4,hz_jiang);} //松开时写实心球写降字
else {xiehz(1,2,tb_1);xiehz(1,4,hz_sheng);} //结合时写升
jianpan();
if(shache)xiehz(2,2,tb_2); //
else xiehz(2,2,tb_1); //
jianpan();
if(jin_1)xiehz(2,4,hz_gs); //
else xiehz(2,4,hz_gj); //
if(sj_s>20){EX0=0;xiehz(3,0,hz_bj5);guole();sj_s=0;} //
}
}
///////////////////查磁片程序/////////////
jishu1() interrupt 0
{
EX0=0;
yanshi1(20); ///消除线路干扰,消抖
if(~ge) ///消抖
{
shiling=0; ///防止计数传感器失灵,或机器不转
if(zhengfan)
{ if(~ti_1)lihe=1; //提起标志为零时离合器松开
else
{ //提起标志1时
while((zhengfan)&&(~ge)); //等待方向传感器被触发,
if(ge)
{ //方向传感器没有被触发时
EA=0;EX0=0; //总中断为零不再计数
lihe=1;zd_1=0; //离合松,自动标志为0
xiehz(3,0,hz_bj2); //写方向传感器失灵汉字
jing(); //进入警状态
}
}
if(tj_1) //调节标志为一时进行调节
{
tj_1=0; ///置零调节标志,只进行一次调节
EX1=0; //关闭过松触发中断
song_1=1; //松标志置一,
}
gaodu_1++; //提升高度计数加加
////////////////////////////////////////////////////////////////
if(zd_1)
{ // 是自动模式判断高度
if(gaodu_1>=gaodu_0)/// ///高度到否判断
{ //到了
if(~jin_1)
{ //紧标志零时
ti_1=0; //提升标志置零
lihe=1; //离合断开
yanshi1(40); //延时防干扰
}
else
{ //进标志一时
jin_1=0; // 置零,只紧一次
song_1=0; //松标志为零,不松了
gaodu_1--; //高度计数器减减,让提升数值不变。
sj_j++; //紧的次数加加
if(sj_j>4)gaodu_1--; //连续紧超过4次了,多紧一个磁片
}
}
}
else {
lihe=1;ti_1=0; //落锤停车
yanshi1(40);
}
}
///////////////////////////////////////////////////////////////////////////////////
else
{
gaodu_1--; //落锤时高度减减
if(gaodu_1<=shiji_0)
{ //落到底了
if(zd_1) ///
{
if(~song_1)
{ //松标志为零时提升
if(~ti_1)cishu++; //打夯次数加一
ti_1=1; //提升标志
tj_1=1; //调节标志
lihe=0; ///结合离合显示上横
EX1=1; //开外中断1,检查是否松,
yanshi1(40); //延时
}
else
{
song_1=0; //松标志置零
gaodu_1++; //松一个磁片
sj_j=0; //紧次数置零
sj_s++; // 松的次数加加
if(sj_s>4)gaodu_1++; //连续松了超4次了,多松一个
}
}
else ting(); //停车
}
}
}
EX0=1;
}
////////////////////////////////////////
songle() interrupt 2
{yanshi(30);
if(~sj_p33)
{
jin_1=1;
sj_s=0; //碰到钢丝绳时松计数置零,防止过松。
EX1=0;
}
}
复制代码
作者:
5000322
时间:
2017-7-20 16:12
这个程序是何用途?
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1