|
本程序可以设置切断物品的长度(mm),批次。速度。每批次切断的数量。
名称:切管机
功能:可设置长度.速度,批次,产量
12864显示
24C02存储
编写:鞠宝伦
版本:I
编写日期:2016.03.025
修改:无
修改日期:无
- #include<reg52.h>
- #include"12864.h"
- #include"delay.h"
- #include"i2c.h"
- #include"def.h"
- //uchar fer[4];
- #define AT24C02 0xa0 //AT24C02 地址 这个地址是自己设置的 全局宏定义
- //unsigned char xdata fer[40]; //外部数据存储器
- sbit set=P3^2;//设置。
- sbit up=P3^3;//加.
- sbit down=P3^4;//减.
- sbit strat=P3^5;//启动.
- uchar set_num=0;
- uint Changdu=10,pici=10,sudu=10,Changdu1=0,pici1=0,sudu1=0,mcsl=10;
- uint i=0,o=0,k=0,count,cou=0;
- uchar FFW_flag=0;
- //uchar REV_flag=0;
- uchar stop_flag=0;
- uchar code FFW[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9};
- //uchar code REV[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1};
- uchar code lineA_data[]={" 福泰克 "};
- uchar code lineB_data[]={" 电子有限公司 "};
- uchar code lineC_data[]={" 我爱单片机 "};
-
- uchar code line0_data[]={"长度: mm "};
- uchar code line1_data[]={"切断: 000/ 次"};
- uchar code line2_data[]={"速度: r/s "};
- uchar code line3_data[]={"产量: 000/ PCS"};
- uchar code linea0_data[]={"长度设定: mm"};//长度设定。
- uchar code linea1_data[]={"切断批次: 次"};//批次设定
- uchar code linea2_data[]={"速度设定: rs"};//速度设定。
- uchar code linea3_data[]={"产量设定: pcs"}; //计数器
-
- /////////////////////////////////////////////////////////
- void lcd_pos(uchar X,uchar Y)
- {
- uchar pos;
- if (X==1) {X=0x80;}
- else if (X==2) {X=0x90;}
- else if (X==3) {X=0x88;}
- else if (X==4) {X=0x98;}
- pos = X+Y ;
- lcd_wcmd(pos); //显示地址
- }
- /////////////////////////////////////////////////////////////
- void Changdu_display() //长度
- {
- lcd_wdat(Changdu/100%10+0x30);
- lcd_wdat(Changdu/10%10+0x30);
- lcd_wdat(Changdu%10+0x30);
- }
- void pici_display() //批次
- {
- lcd_wdat(pici/100%10+0x30);
- lcd_wdat(pici/10%10+0x30);
- lcd_wdat(pici%10+0x30);
- }
- void sudu_display() //速度
- {
- // lcd_wdat(sudu/100%10+0x30);
- lcd_wdat(sudu/10%10+0x30);
- lcd_wdat(sudu%10+0x30);
- }
- void count_display() //延时时间
- {
- lcd_wdat(count/100%10+0x30);
- lcd_wdat(count/10%10+0x30);
- lcd_wdat(count%10+0x30);
- }
- void display()
- {
- lcd_pos(1,5);
- lcd_wdat(Changdu/100%10+0x30);
- lcd_wdat(Changdu/10%10+0x30);
- lcd_wdat(Changdu%10+0x30);
- lcd_pos(2,5);
- lcd_wdat(pici/100%10+0x30);
- lcd_wdat(pici/10%10+0x30);
- lcd_wdat(pici%10+0x30);
- lcd_pos(3,5);
- // lcd_wdat(sudu/100%10+0x30);
- lcd_wdat(sudu/10%10+0x30);
- lcd_wdat(sudu%10+0x30);
- lcd_pos(4,5);
- lcd_wdat(count/100%10+0x30);
- lcd_wdat(count/10%10+0x30);
- lcd_wdat(count%10+0x30);
- }
- /////////////////////////////////////////////////////////////
- void display1() //设置过后的数据显示
- {
- lcd_pos(1,3);
- lcd_wdat(Changdu/100%10+0x30);
- lcd_wdat(Changdu/10%10+0x30);
- lcd_wdat(Changdu%10+0x30);
- delay_ms(2);
-
- lcd_pos(2,5);
- lcd_wdat(pici/100%10+0x30);
- lcd_wdat(pici/10%10+0x30);
- lcd_wdat(pici%10+0x30);
- delay_ms(2);
- lcd_pos(2,3);
- lcd_wdat(pici1/100%10+0x30);
- lcd_wdat(pici1/10%10+0x30);
- lcd_wdat(pici1%10+0x30);
- delay_ms(2);
- lcd_pos(3,3);
- // lcd_wdat(sudu/100%10+0x30);
- lcd_wdat(sudu/10%10+0x30);
- lcd_wdat(sudu%10+0x30);
- delay_ms(2);
- lcd_pos(4,3);
- lcd_wdat(cou/100%10+0x30);
- lcd_wdat(cou/10%10+0x30);
- lcd_wdat(cou%10+0x30);
- delay_ms(2);
- lcd_pos(4,5);
- lcd_wdat(count/100%10+0x30);
- lcd_wdat(count/10%10+0x30);
- lcd_wdat(count%10+0x30);
- }
- void ds_display()
- {
- lcd_pos(1,0);
- for(i=0;i<16;i++)
- {
- lcd_wdat(line0_data[i]);
- delay_ms(1);
- }
- lcd_pos(2,0);
- for(i=0;i<16;i++)
- {
- lcd_wdat(line1_data[i]);
- delay_ms(1);
- }
- lcd_pos(3,0);
- for(i=0;i<16;i++)
- {
- lcd_wdat(line2_data[i]);
- delay_ms(1);
- }
- lcd_pos(4,0);
- for(i=0;i<16;i++)
- {
- lcd_wdat(line3_data[i]);
- delay_ms(1);
- }
-
- }
- ////////////////////////////////初始化广告图表////////////////////////////////
- void cs_display()
- {
- lcd_pos(1,0);
- for(i=0;i<16;i++)
- {
- lcd_wdat(lineA_data[i]);
- delay_ms(1);
- }
- lcd_pos(2,0);
- for(i=0;i<16;i++)
- {
- lcd_wdat(lineB_data[i]);
- delay_ms(1);
- }
- lcd_pos(4,0);
- for(i=0;i<16;i++)
- {
- lcd_wdat(lineC_data[i]);
- delay_ms(1);
- }
-
- }
- ///////////////////////////////////////////////////////////////////
- void scankey()
- {
- uchar mun=0;
- if(set==0) //设置
- {
- delay_ms(10);
- if(set==0)
- {
- delay_ms(10);
- while(!set);
- set_num++;
- lcd_clr();
- lcd_pos(1,0);
- for(i=0;i<16;i++)
- {
- lcd_wdat(linea0_data[i]);
- delay_ms(1);
- }
- lcd_pos(2,0);
- for(i=0;i<16;i++)
- {
- lcd_wdat(linea1_data[i]);
- delay_ms(1);
- }
- lcd_pos(3,0);
- for(i=0;i<16;i++)
- {
- lcd_wdat(linea2_data[i]);
- delay_ms(1);
- }
- lcd_pos(4,0);
- for(i=0;i<16;i++)
- {
- lcd_wdat(linea3_data[i]);
- delay_ms(1);
- }
- display();
- if(set_num==1)
- {
-
- lcd_wcmd(0x0c); //关光标关闪烁
- lcd_pos(1,5);
- Changdu_display();
-
- lcd_pos(1,6);
- lcd_wcmd(0x0f); //开光标并闪烁
-
- }
- if(set_num==2)
- {
- lcd_wcmd(0x0c); //关光标关闪烁
- lcd_pos(2,5);
- pici_display();
- lcd_pos(2,6);
- lcd_wcmd(0x0f); //开光标并闪烁
- }
- if(set_num==3)
- {
- lcd_wcmd(0x0c); //关光标关闪烁
- lcd_pos(3,5);
- sudu_display();
- lcd_pos(3,6);
- lcd_wcmd(0x0f); //开光标并闪烁
- }
- if(set_num==4)
- {
- lcd_wcmd(0x0c); //关光标关闪烁
- lcd_pos(4,5);
- count_display();
- lcd_pos(4,6);
- lcd_wcmd(0x0f); //开光标并闪烁
- }
-
- if(set_num==5)
- {
- set_num=0;
- display();
- //display1();
- delay_ms(5);
- lcd_wcmd(0x0c); //关光标关闪烁
- write24c02(110,Changdu);
- write24c02(111,pici);
- write24c02(112,sudu);
- write24c02(113,count);
- // write24c02(114,old5);
- // write24c02(115,old6);
- delay_ms(1);
- lcd_clr();
- ds_display();
- //display();
-
- display1(); //设置过后的数据显示
-
- }
-
- }
- }
- if(set_num!=0)
- {
- if(down==0) //--
- {
- delay_ms(5);
- if(down==0)
- {
- if(set_num==1)
- {
- Changdu--;
- if(Changdu==0)Changdu=100;lcd_pos(1,5);Changdu_display();lcd_pos(1,6);
- }
- if(set_num==2)
- {
- pici--;
- if(pici==0)pici=100;lcd_pos(2,5);pici_display();lcd_pos(2,6);
- }
- if(set_num==3)
- {
- sudu--;
- if(sudu==0)sudu=30;lcd_pos(3,5);sudu_display();lcd_pos(3,6);
- }
- if(set_num==4)
- {
- count--;
- if(count==0)count=100;lcd_pos(4,5);count_display();lcd_pos(4,6);
- }
-
- mun=0;
- while(!down)
- {
- delay_ms(5);
- if(mun!=100)mun++;
- else
- {
- if(set_num==1)
- {
- Changdu--;
- if(Changdu==0)Changdu=100;lcd_pos(1,5);Changdu_display();lcd_pos(1,6);
- }
- if(set_num==2)
- {
- pici--;
- if(pici==0)pici=100;lcd_pos(2,5);pici_display();lcd_pos(2,6);
- }
- if(set_num==3)
- {
- sudu--;
- if(sudu==0)sudu=30;lcd_pos(3,5);sudu_display();lcd_pos(3,6);
- }
- if(set_num==4)
- {
- count--;
- if(count==0)count=100;lcd_pos(4,5);count_display();lcd_pos(4,6);
- }
-
- }
- }
- }
- }
- if(up==0) //++
- {
- delay_ms(5);
- if(up==0)
- {
- if(set_num==1)
- {
- Changdu++;
- if(Changdu>100)Changdu=0;lcd_pos(1,5);Changdu_display();lcd_pos(1,6);
- }
- if(set_num==2)
- {
- pici++;
- if(pici>100)pici=0;lcd_pos(2,5);pici_display();lcd_pos(2,6);
- }
- if(set_num==3)
- {
- sudu++;
- if(sudu>30)sudu=0;lcd_pos(3,5);sudu_display();lcd_pos(3,6);
- }
- if(set_num==4)
- {
- count++;
- if(count>100)count=0;lcd_pos(4,5);count_display();lcd_pos(4,6);
- }
-
- mun=0;
- while(!up)
- {
- delay_ms(5);
- if(mun!=100)mun++;
- else
- {
- if(set_num==1)
- {
- Changdu++;
- if(Changdu>100)Changdu=0;lcd_pos(1,5);Changdu_display();lcd_pos(1,6);
- }
- if(set_num==2)
- {
- pici++;
- if(pici>100)pici=0;lcd_pos(2,5);pici_display();lcd_pos(2,6);
- }
- if(set_num==3)
- {
- sudu++;
- if(sudu>30)sudu=0;lcd_pos(3,5);sudu_display();lcd_pos(3,6);
- }
- if(set_num==4)
- {
- count++;
- if(count>100)count=0;lcd_pos(4,5);count_display();lcd_pos(4,6);
- }
-
- }
- }
- }
- }
- }
- }
- void motor_ffw()
- {
-
- //圆的周长=400脉冲=10MM //1MM=10MM除以400脉冲=40脉冲
- unsigned long zhongmaicong; //总脉冲
- uchar i;
- zhongmaicong=(Changdu*40)*mcsl;//长度*1MM*每次数量
- while(zhongmaicong)
- {
- P1=FFW[i];
- delay_ms(sudu);
- i++;k++;o++;
- if(i==8)i=0;
- if(o==Changdu*40)
- {
- o=0;
- cou++;
- display1();
- }
- if(k==(Changdu*40)*mcsl)
- {
- pici1++;
- display1();
- }
- zhongmaicong--;
-
- }
- FFW_flag=0;
- }
-
- //////////////////////////////////////////////////////////////////////////
- void main()
- {
- //uchar z;
- lcd_init();
- lcd_clr();
- init(); //初始化24C02
- cs_display();//广告图表
-
- /*********下面的一小段程序的功能为格式化密码存储区。************
- ******当24c02中这些存储区由于其他程序的运行而导致***************
- *******所存数据发生了变化,或者密码遗忘时, ********************
- ******可以删掉其前面的注释线,然后重新编译下载。****************
- ******而将密码还原为000000后,请将下面的程序用******************
- ******注释屏蔽掉,重新编译、下载,方可正常使用****************/
- // write24c02(110,0x00);
- // write24c02(111,0x00);//24c02的第110到115地址单元作为密码存储区
- // write24c02(112,0x00);
- // write24c02(113,0x00);
- // write24c02(114,0x00);
- // write24c02(115,0x00);
- //////////////////////////////////////////////////////////
- Changdu=read24c02(110);
- pici=read24c02(111);
- sudu=read24c02(112);
- count=read24c02(113);
- delay_ms(100);
- ds_display();
- display1(); //设置过后的数据显示
- while(1)
- {
- scankey();
- if(set_num==0)
- {
- if(!strat)
- {
- delay_ms(2);
- while(!strat)
- {
- motor_ffw();
- display1(); //设置过后的数据显示
- }
- }
- }
- if((up==0)&down==0)
- {
- delay_ms(2);
- if((up==0)&down==0)
- {
- while(!(up&down));
- {
- pici1=0;cou=0;
- display1();
- }
- }
- }
- }
- }
- /*void timer0()interrupt 1
- {
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- a++;
- if(a==2)
- {
- a=0;
- keyprocess();
-
- }
- TR0=0;
- }*/
复制代码
附件如下:
|
评分
-
查看全部评分
|