第一个自主设计自主编译的C程序,虽然比不上人家的那好,但是这是我是实实在在,经过N多失败,仿真得出的,我珍惜,我还要努力!
- #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit led4=P1^0;
- sbit led3=P1^1; //第一个自己编写的c程序,付出了太多,才换回这几行代码,源于热爱!2010年8月8日与天津开发区
- sbit led2=P1^2;
- sbit led1=P1^3;
- sbit inc=P2^0; //加
- sbit dec=P2^1; //减
- sbit flage=P2^3;//模拟传感器
- sbit start=P2^2;
- sbit ctrl=P1^7;
- float setdate,setdate1,setdate10,ly=0.10,yi=1;//实际 要设定的浮点数
- uint h;
- uchar g=0,s=0,bw=0,q=0; //显示单元 个位、十位、百位、千位
- uchar gruang,sgruang;//计算圈数实际圈数
- uchar j=0;//实际圈数
- uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//不带小数点显示0~9
- uchar code tab1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; //带小数点显示0~9
- void delay(uint z) //延时程序
- {
- uint x,a,b;
- for (x=0;x<z;x++)
-
- {
- for(b=120;b>0;b--)
- {
- for(a=3;a>0;a--);
-
- }
- }
- }
- void display1() //显示程序
- {
-
- led1=0;
- P0=tab[g]; //个
- delay(1);
- led1=1;
- led2=0;
- P0=tab1[s];//十
- delay(1);
- led2=1;
- led3=0;
- P0=tab[bw]; //百
- delay(1);
- led3=1;
- led4=0;
- P0=tab[q]; //千
- delay(1);
- led4=1;
- }
- void display2() //显示程序
- {
-
- led1=0;
- P0=tab[g]; //个
- delay(1);
- led1=1;
- led2=0;
- P0=tab[s];//十
- delay(1);
- led2=1;
- led3=0;
- P0=tab[bw]; //百
- delay(1);
- led3=1;
- led4=0;
- P0=tab[q]; //千
- delay(1);
- led4=1;
- }
- float keyball() //按键设置程序对加工料长短设置
- {
- if(inc==0) //两位加
- {
- delay(30);
- if(inc==0)
- {
-
-
- if(g>9)
- {g=0;
- if(s>9)
-
- {g=0;s=0;setdate=0;setdate1=0;setdate10=0;}
-
- else s++,setdate1=0,setdate10=(setdate10+yi);//+1
-
-
-
-
- }
-
- else g++,setdate1=(setdate1+ly); //+0.1
-
-
-
- }
- }
- if(dec==0)
- { //两位减
- delay(30);
- if(dec==0)
- {
-
-
- if(g==0)
- {g=9;
- if(s==0)
- {g=9;s=9;}
- else s--,setdate10=(setdate10-yi);//-1
-
-
-
- }
-
-
- else g--,setdate1=(setdate1-ly); //-0.1
-
-
- }
- }
-
- setdate=(setdate1+setdate10);
- return setdate;//返回按键设定值
- }
- uint divdate(float set) //设定计算函数换算成整数圈
- {
- float d,e,c;
-
- d=0.034; //0.34米/10
- e=set;//设定米数
- c=(e/d); //值
- h=c;
- return h; //返回计算后要转的圈数
- }
- uint jiance() //圈数检测传感器函数
- {
-
- if(flage==0)
- {
- delay(19);
- if(flage==0)
- {
-
- if(gruang==j)
- { ; //一旦J=S了证明长度达到了空操作
- }
- else j++; //不到则J++
- }
-
-
- }
- return j; //返回实际圈数
- }
-
- void main() //主函数
- { uint a;
- P2=0x1f;
- while (1)
- {
- gruang=divdate(keyball());//读入设定值然后换算成计算圈数
- display1();//显示
-
- if(gruang>0)
- { if(start==0)
- {
- delay(25);
- if(start==0)
- {
- s=0;
- g=0;
- while(1)
- {
-
-
- sgruang=jiance();//实际转的圈数
- a=sgruang;
- g=a%10;
- s=a/10;
- bw=a/100;
- q=a/1000;
-
-
-
-
-
-
- display2();
- if(gruang==sgruang)
- {
-
- ctrl=0;
-
- delay(100);
-
- ctrl=1;
- j=0;//长度到了,j复位
- }
- else ctrl=1;
-
-
-
-
-
-
-
-
-
- }
-
-
-
- }
-
-
-
-
-
-
-
-
- }
-
-
-
-
- }
- }
-
- }
复制代码
|