標(biāo)題:
單片機(jī)鋼筋調(diào)直機(jī)源程序-第一個自主編譯C程序
[打印本頁]
作者:
hongniu
時間:
2015-6-23 20:41
標(biāo)題:
單片機(jī)鋼筋調(diào)直機(jī)源程序-第一個自主編譯C程序
第一個自主設(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; //第一個自己編寫的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; //顯示單元 個位、十位、百位、千位
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) //延時程序
{
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() //按鍵設(shè)置程序?qū)庸ち祥L短設(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ù)檢測傳感器函數(shù)
{
if(flage==0)
{
delay(19);
if(flage==0)
{
if(gruang==j)
{ ; //一旦J=S了證明長度達(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;//長度到了,j復(fù)位
}
else ctrl=1;
}
}
}
}
}
}
復(fù)制代碼
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1