实例介绍
【实例截图】
【核心代码】
数控电源-C源程序
├── 0808
├── 0808.LST
├── 0808.M51
├── 0808.OBJ
├── 0808.Uv2.bak
├── 0808.c
├── 0808.hex
├── 0808.lnp
├── 0808.opt.bak
├── 0808.plg
├── 0808.uvopt
├── 0808.uvproj
├── 0808_Opt.Bak
├── 0808_Uv2.Bak
├── 0808_uvopt.bak
└── 数控电源.Bkp
0 directories, 16 files
#include <reg52.h> //通用51单片机头文件 #define uchar unsigned char 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 //段选宏定义 void delay(int); //延时函数声明 void display(uchar); //显示函数声明 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 }; uchar code table[]={//用于显示电压值的数组 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 }; 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小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论