基于单片机的数控直流稳压电源毕业论文 下载本文

内容发布更新时间 : 2024/5/3 22:51:49星期一 下面是文章的全部内容请认真阅读。

sbit LEDwei2=P2^6; //高位数码管位选 #define duan P0 //段选宏定义 void delay(int); //延时函数声明 void display(uchar); //显示函数声明

uchar code LEDcode[]={0xc0,0xf9,0xa4,0xb0,0x99, 0x92,0x82,0xF8,0x80,0x90,0x8e}; //共阳数码管0-9和F(为段选所用) uchar code byte[]={ 0x00,0x02,0x04,0x06,0x08,0x0a,0x0c,0x0e, 0x10,0x12,0x14,0x16,0x18,0x1a,0x1c,0x1e, 0x20,0x22,0x24,0x26,0x28,0x2a,0x2c,0x2e, 0x30,0x32,0x34,0x36,0x38,0x3a,0x3c,0x3e, 0x40,0x42,0x44,0x46,0x48,0x4a,0x4c,0x4e, 0x50,0x52,0x54,0x56,0x58,0x5a,0x5c,0x5e, 0x60,0x62,0x64,0x66,0x68,0x6a,0x6c,0x6e, 0x70,0x72,0x74,0x76,0x78,0x7a,0x7c,0x7e, 0x80,0x82,0x84,0x86,0x88,0x8a,0x8c,0x8e, 0x90,0x92,0x94,0x96,0x98,0x9a,0x9c,0x9e, 0xa0,0xa2,0xa4,0xa6,0xa8,0xaa,0xac,0xae, 0xb0,0xb2,0xb4,0xb6,0xb8,0xba,0xbc,0xbe, 0xc0,0xc2,0xc4,0xc6,0xc8,0xca,0xcc,0xce, 0xd0,0xd2,0xd4,0xd6,0xd8,0xda,0xdc,0xde, 0xe0,0xe2,0xe4,0xe6,0xe8,0xea,0xec,0xee, 0xf0,0xf2,0xf4,0xf6,0xf8,0xfa,0xfc,0xfe, };//DA转换数据

uchar code table[]={0x11,0x12,15,16,17,18,20,21,22,23, 24,25,27,28,29,30,31,32,34,35, 36,37,38,39,41,42,43,44,45,47, 48,49,50,51,52,53,55,56,57,58, 59,61,62,63,64,65,66,68,69,70, 71,72,73,75,76,77,78,79,80,82, 83,84,85,86,87,89,90,91,92,93, 94,96,97,98,99}; //用于显示电压值的数组

void main() { uchar num=0; while(1) {

if(keyup==0) //步进加端口为低电平, { delay(10); //稍作延时,消抖, if(keyup==0) //步进加端口依然为低电平,说明的确是被按下, { if(num==128) //执行电压DA转换数值步进增加一 num=0; else num++; } while(keyup==0); //防止按死语句 } if(keydown==0) //步进减端口为低电平, { delay(10); //稍作延时,消抖, if(keydown==0) //步进减端口依然为低电平,说明的确是被按下, { if(num==0) //执行电压DA转换数值步进减一 num=128; else num--; } while(keydown==0); //防止按死语句 } if(RESET==0) // 复位端口为低电平 { delay(10); //稍作延时,消抖, if(RESET==0) //复位端口依然为低电平,说明的确是被按下, { num=0; //执行复位操作 } while(RESET==0); //防止按死语句 } P1=byte[num]; //给DA一个数值,转化成相应的电压值 delay(10); display(num); //调用显示函数显示电压值 } }

void delay(int x) //12M晶振,约1ms延时函数 { int i;

for(;x>0;x--) for(i=0;i<123;i++) ; }

void display(uchar num) //显示函数 { uchar temp; temp=table[num]; if(num<75) //电压值小于10V的可以直接在数码管上显示出来 { duan=LEDcode[temp/10]&0x7f; //显示个位,并加显小数点 LEDwei1=1; delay(5); LEDwei1=0; duan=LEDcode[temp];; //显示小数点后一位 LEDwei2=1; delay(5); LEDwei2=0; } else //电压值大于10V的在数码管上显示字母\ { duan=LEDcode[10]; //显示高位 LEDwei1=1; delay(5); LEDwei1=0; duan=LEDcode[10]; //显示低位 LEDwei2=1; delay(5); LEDwei2=0; } }