实例介绍
【实例简介】
【实例截图】
【文件目录】
89C51数控电源
├── 原理图截图.jpg
└── 【数控电源】C源程序
├── 0808
├── 0808.LST
├── 0808.M51
├── 0808.OBJ
├── 0808.Uv2.bak
├── 0808.lnp
├── 0808.opt.bak
├── 0808.plg
├── 0808.uvopt
├── 0808.uvproj
├── 0808_Opt.Bak
├── 0808_Uv2.Bak
├── 0808_uvopt.bak
├── 数控.c
├── 数控.hex
└── 数控电源.Bkp
1 directory, 17 files
【核心代码】
#include <reg52.h> //通用51单片机头文件
#define uchar unsigned char
void delay(int); //延时函数声明void display(uchar); //显示函数声明
sbit RESET=P3^3; //DA转换数值复位端口位定义
sbit keyup=P3^4; //步进加端口位定义
sbit keydown=P3^5; //步进减端口位定义
sbit LEDwei1=P2^4; //低位数码管位选
sbit LEDwei2=P2^5; //低位数码管位选
sbit LEDwei3=P2^6; //高位数码管位选
sbit LEDwei4=P2^7; //高位数码管位选
#define duan P0 //段选宏定义
15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,
31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,
47,48,49,50,
51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,
67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,
83,84,85,86,87,88,89,90,91,92,93,94,
95,96,97,98,99,100,101,102,103,104,105,106,107,108,
109,110,111,112,113,114,115,116,117,118,119,120
};
uchar code LEDcode[]={//共阳数码管0-9/F/U(为段选所用)
0xc0,0xf9,0xa4,0xb0,0x99,0x92,
0x82,0xF8,0x80,0x90,0x8e,0xc1
};
uchar code byte[]={ //电压DA转换数值1.5V-15.0V 步进0.5V
5, //1.5
7,8,10,12,14, //2
15,17,19,21,22,//2.5
24,26,28,30,31,//3
33,35,37,38,40, //3.5
42,44,46,47,49, //4.0
51,53,55,56,58,
60,62,63,65,67, //5.0
69,71,72,74,76,
78,80,81,83,85,//6
86,88,90,92,94,
95,97,99,101,102,//7
104,106,108,110,111,
113,115,117,119,120, //8
122,124,126,128,129,
131,133,134,136,138,//9.0
140,142,143,145,147,
149,150,152,154,156,//10
157,159,161,163,164,
166,168,170,172,173,//11
175,177,179,181,182,
184,186,188,190,191, //12
};
void main()
{
uchar num=35;
while(1)
{
if(keyup==0) //步进加端口为低电平,
{
delay(10); //稍作延时,消抖,
if(keyup==0) //步进加端口依然为低电平,说明的确是被按下,
{
num ;
}
while(keyup==0); //防止按死语句
}
if(keydown==0) //步进减端口为低电平,
{
delay(10); //稍作延时,消抖,
if(keydown==0) //步进减端口依然为低电平,说明的确是被按下,
{
num--;
}
while(keydown==0); //防止按死语句
}
if(RESET==0) // 复位端口为低电平
{
delay(10); //稍作延时,消抖,
if(RESET==0) //复位端口依然为低电平,说明的确是被按下,
{
num=35; //执行复位操作
}
while(RESET==0); //防止按死语句
}
P1=byte[num]; //给DA一个数值,转化成相应的电压值
delay(10);
display(num); //调用显示函数显示电压值
}
}
void delay(int x) //12M晶振,约0.5ms延时函数
{
int i;
for(;x>0;x--)
for(i=0;i<50;i )
;
}
void display(uchar num) //显示函数
{ uchar temp;
temp=table[num];
if(num<106) //电压值小于15V的可以直接在数码管上显示出来
{
duan=LEDcode[temp/100]; //显示十位
LEDwei1=0;
delay(5);
LEDwei1=1;
duan=0xff;
duan=LEDcode[temp%100/10]&0x7f; //显示个位,并加显小数点
LEDwei2=0;
delay(5);
LEDwei2=1;
duan=0xff;
duan=LEDcode[temp%10]; //显示小数点后一位
LEDwei3=0;
delay(5);
LEDwei3=1;
duan=0xff;
duan=LEDcode[11]; //显示U,代表电压U
LEDwei4=0;
delay(5);
LEDwei4=1;
duan=0xff;
}
else //电压值大于15V的在数码管上显示字母"FF"
{
duan=LEDcode[10]; //显示高位王鲁赣
// LEDwei1=0;
LEDwei2=0;
LEDwei3=0;
//LEDwei4=0;
delay(6);
LEDwei1=1;
LEDwei2=1;
LEDwei3=1;
LEDwei4=1;
duan=0xff; //显示低位
}
}
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论