标题:
单片机钢筋调直机源程序-第一个自主编译C程序
[打印本页]
作者:
hongniu
时间:
2015-6-23 20:41
标题:
单片机钢筋调直机源程序-第一个自主编译C程序
第一个自主设计自主编译的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;
}
}
}
}
}
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1