基于单片机的数控直流稳压电源的设计毕业设计(编辑修改稿)内容摘要:

{ void ledout(unsigned char ATA,char add,char j)。 void delays(unsigned char t)。 unsigned char odata,key,temp。 unsigned int F,f=0x100。 //初始频率 char add=0,j=1。 odata = 155。 //电压初值为 5v j=1。 while(1) { for(F=f。 F0x110。 F++) { P3=0xff。 key=P3。 if (key!=0xff) { unsigned char i。 for(i=0。 i10。 i++) { ledout(odata,add,j)。 delays(10)。 ledout(odata,add,j)。 delays(10)。 } key=P3。 if (key==0xff) break。 for(i=0。 i10。 i++) { 13 ledout(odata,add,j)。 delays(10)。 ledout(odata,add,j)。 delays(10)。 } if(add==0) temp=odata。 //记录当前电压 值 switch(key) { case 0x7f: if (add==0) if(odata57) odata=odata2。 //电压加 break。 case 0xbf: if (add==0) if(odata255) odata=odata+2。 break。 case 0xdf: if(add==0) { //三角波 f=0x100。 //1 时为频率最高,最大允许 256 odata=155。 add=1。 } else if(add==1) { //方波 //f=f*200。 //频率跟随 f=0x100。 odata=55。 add=200。 } else if(add==1) { //f=f*200。 f=0x100。 odata=55。 add=200。 14 } else if(add==200) { //直流电压 add=0。 odata=temp。 //电压记忆恢复 } else { add=0。 odata=temp。 } break。 case 0xef: if(add!=0) { f=f/2。 //频率频率加 if (f==1) if(add==1) f=0x100。 else f=0x3200。 } break。 } } if(odata==255) add=add。 odata=odata+add。 if(odata==55) add=add。 P0=odata。 //送数据 } ledout(odata,add,j)。 //送显示 j=j。 } } 15 void ledout(unsigned char ATA,char add,char j) { unsigned char DH,DL,temp。 switch(add) { case 0: { temp=((ATA55)/2)1。 //十进制转换 DH=temp/10。 DL=temp%10。 }break。 case 1: { DH=11。 DL=12。 }break。 case 1: { DH=11。 DL=12。 }break。 case 200: { DH=13。 DL=14。 }break。 case 200: { DH=13。 DL=14。 }break。 } switch(j) { case 1: 16 { P1=led[DH]。 //送数码管高位显示 P1_7=1。 //动态显示 }break。 case 1: P1=led[DL]。 //送数码管低位显示 break。 } } void delays(unsigned char t) { unsigned char s。 for(。 t0。 t) for(s=0。 s255。 s++)。 } 17 . 扫描键盘程序 C语言程序如下: include void key_deal(void) {unsigned char Key_value。 // 按键键值 开始 将 和 能输入口 读取 p1 口输入状态 P1口屏蔽高 5 位,赋值key_valu=? 若 key_valu=6 S1 键按下 若 key_valu=5 S2 键按下 若 key_valu=4 S3 键按下 否则检查错误退出 S1 件对应子程序 S2 件对应子程序 S3 件对应子程序 结束 18 P1 |= 0x07。 // ~ 为输入端口 Key_value = P1 amp。 07。 // 屏蔽 P1口高 5 位,取键值 switch (Key_value){ case 6: Sub_S1()。 break。 // S1 按键按下,执行对应子程序 case 5: Sub_S2()。 break。 // S2 按键按下,执行对应子程序 case 3: Sub_S3()。 break。 // S3 按键按下,执行对应子程序 default: break。 } } . 显示驱动程序 C语言程序如下: include include include 开始 程序初始化 是否是状态 s1 是否是状态 s2 启动状态 s2 是否是状态 s3 启动状态 s3 启动状态 s1 按键处理 按键是否按下 返回 K1 按键 K2 按键 S2+, S3 进入时间调整 返回 K3 按键 循环执行 S2 循环执行 S1 19 code uchar disp_seg[]= {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7c,0x39,0x5f,0x79,0x71,0x40,0x00,0xff,0xf3}。 // 0 1 2 3 4 5 6 7 8 9 a b c d e f 全灭 , 全亮 , P. //定义显示缓冲区(由定时中断程序自动扫描) uchar DispBuf[8]。 //8 位数码管显示的数字码(显示段码的偏移量) uchar bdata ke。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。