|
第一個(gè)自主設(shè)計(jì)自主編譯的C程序,雖然比不上人家的那好,但是這是我是實(shí)實(shí)在在,經(jīng)過N多失敗,仿真得出的,我珍惜,我還要努力!
- #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit led4=P1^0;
- sbit led3=P1^1; //第一個(gè)自己編寫的c程序,付出了太多,才換回這幾行代碼,源于熱愛!2010年8月8日與天津開發(fā)區(qū)
- 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;//實(shí)際 要設(shè)定的浮點(diǎn)數(shù)
- uint h;
- uchar g=0,s=0,bw=0,q=0; //顯示單元 個(gè)位、十位、百位、千位
- uchar gruang,sgruang;//計(jì)算圈數(shù)實(shí)際圈數(shù)
- uchar j=0;//實(shí)際圈數(shù)
- uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//不帶小數(shù)點(diǎn)顯示0~9
- uchar code tab1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; //帶小數(shù)點(diǎn)顯示0~9
- void delay(uint z) //延時(shí)程序
- {
- 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]; //個(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]; //個(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() //按鍵設(shè)置程序?qū)庸ち祥L(zhǎng)短設(shè)置
- {
- 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;//返回按鍵設(shè)定值
- }
- uint divdate(float set) //設(shè)定計(jì)算函數(shù)換算成整數(shù)圈
- {
- float d,e,c;
-
- d=0.034; //0.34米/10
- e=set;//設(shè)定米數(shù)
- c=(e/d); //值
- h=c;
- return h; //返回計(jì)算后要轉(zhuǎn)的圈數(shù)
- }
- uint jiance() //圈數(shù)檢測(cè)傳感器函數(shù)
- {
-
- if(flage==0)
- {
- delay(19);
- if(flage==0)
- {
-
- if(gruang==j)
- { ; //一旦J=S了證明長(zhǎng)度達(dá)到了空操作
- }
- else j++; //不到則J++
- }
-
-
- }
- return j; //返回實(shí)際圈數(shù)
- }
-
- void main() //主函數(shù)
- { uint a;
- P2=0x1f;
- while (1)
- {
- gruang=divdate(keyball());//讀入設(shè)定值然后換算成計(jì)算圈數(shù)
- display1();//顯示
-
- if(gruang>0)
- { if(start==0)
- {
- delay(25);
- if(start==0)
- {
- s=0;
- g=0;
- while(1)
- {
-
-
- sgruang=jiance();//實(shí)際轉(zhuǎn)的圈數(shù)
- 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;//長(zhǎng)度到了,j復(fù)位
- }
- else ctrl=1;
-
-
-
-
-
-
-
-
-
- }
-
-
-
- }
-
-
-
-
-
-
-
-
- }
-
-
-
-
- }
- }
-
- }
復(fù)制代碼
|
|