程控电源项目管理及文档管理知识分析_第1页
程控电源项目管理及文档管理知识分析_第2页
程控电源项目管理及文档管理知识分析_第3页
程控电源项目管理及文档管理知识分析_第4页
程控电源项目管理及文档管理知识分析_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于单片机的程控电源设计1、 项目背景 直流稳压源是一种常见的电子仪器,其广泛应用于实验教学和科学研究等领域。目前使用的直流稳压电源大部分存在诸多缺点,如输出不可调,电压不稳定等等,因而导致实验结果不精确。本次项目就设计一个基于单片机控制的程控电源。描述:使用单片机输出PWM去控制电源调压模块以控制电源电压输出,实现步进可调。项目参数:1 输入电压816V,如果输入电压低于8V或者高于16V,利用BEEP报警,并且关掉PWM的输出2 输出电压614V,如果输出电压低于6V或者高于14V,利用BEEP报警,同样关掉PWM的输出3 调压分辨率0.25V4 用按键输入电压预设值,然后通过按键的“+”

2、、“-”来步进调节电源的输出,达到预设值允许的范围内5 通过LM3037(LCD14432)来显示当前的电压预设值,当前电压的输出值以及分辨率2、 项目概要分析1、 硬件分析:2、 软件分析:1) 熟悉单片机的原理与应用2) BEEP报警程序设计3) 矩阵按键程序设计4) 液晶显示驱动程序设计5) 产生PWM程序设计6) 电压反馈AD采样程序设计3、 系统分析1、 硬件分析:1) 单片机与BEEP、矩阵按键、LM3037液晶显示以及AD采样转换芯片的具体连接。(单片机控制芯片)(BEEP电路部分)(矩阵按键输入部分)(LM3037液晶显示部分)(TLC549CD A/D转换)2) 程控电路部分

3、原理图:2、 软件分析:1)BEEP报警,P22引脚出现低电平,BEEP发出声音。2)矩阵按键的扫描,采用逐行扫描模式,扫描每个按键是否按下,并做键值处理。3)LM3037液晶的显示,可以采用并行显示或者串行显示,该液晶自带中文字库。4)AD549CD A/D转换芯片驱动程序的编写,5)定时器程序的编写 6)外部中断程序的编写7)PWM脉宽调制波的产生4、 程序流程图5、 程序设计#include<reg52.h>#include<intrins.h>/*-两个常用的宏定义-*/#define uint8 unsigned char #define uint16 uns

4、igned int/*-AD采样时使用的延时定义-*/#define Wait1us_nop_();#define Wait2usWait1us;Wait1us;#define Wait4us Wait2us;Wait2us;#define Wait10us Wait4us;Wait4us;Wait2us;#define Wait20us Wait10us;Wait10us;sbit LED_Control = P20;/* -数码管显示函数的声明 -*/void SEG_Disp(uint8 dat);/*-扫描按键的说明-*/void KEY_Scan(void);/*-延时函数的说明-*

5、/void Delay_ms(uint16 z);/*-数码管段选的定义-*/sbit HC138_A0 = P11;sbit HC138_A1 = P12;sbit HC138_A2 = P13;/*-lcd14432的定义-*/sbit RS = P15;sbit RW = P16;sbit EN = P17;bit BUSY(void);void Write_cmd(uint8 cmd);void Write_dat(uint8 dat);void LCD14432_Init(void);void HZ_Disp(uint8 *p);void LCD_Test();/*-AD转换的引脚定

6、义-*/sbit Tlc549_Dout = P23;sbit Tlc549_CS = P24;sbit Tlc549_Clock = P22;uint8 Read_ADConvert(void);/* -T0的函数声明-*/void Timer0_Init(void);/*-PWM的输出端口-*/sbit PWM0 = P12;void PWM_Out(uint8 rate);uint8 key_value=0;/按键值uint8 count = 0;/记录定时次数uint8 count1 = 0;/uint8 rate1 = 50;uint8 flag = 0;/*-09的数码管断码表-*

7、/uint8 SEG_data10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;uint8 AD_Value5;int main(void)uint8 i=0;uint8 Convert_value=0;uint8 temp=0,temp1=0,temp2=0;LED_Control = 0;Timer0_Init();/初始化定时器0LCD14432_Init();LCD_Test();while(1)/*本程序只显示一位*/Convert_value = Read_ADConvert();Convert_value = Convert

8、_value +0.5;temp = Convert_value /51;temp = temp *2;/temp = (float)temp *10;/temp1 =(float) temp/10;/temp2 =(float) temp%10;Write_cmd(0x83);Write_dat(0x30+key_value);/预设电压值8VWrite_dat('V');Write_cmd(0x87);/输出电压值Write_dat(0x30+temp);/Write_dat('.');/Write_dat(0x30+temp2);Write_dat(

9、9;V');/HZ_Disp("8");/程控电源显示界面/SEG_Disp(temp);KEY_Scan();if(flag=1)/"+"分辨率rate1 = rate1+2;if(rate1>98)rate1 = 98;flag = 0;if(flag=2)/"+"分辨率rate1 = rate1-2;if(rate1<8)rate1 = 8;flag = 0;/SEG_Disp(count1);return 0;/*函数名称:void SEG_Disp(uint8 dat)函数功能:数码管的显示函数入口参数:

10、显示09出口参数:无调用模块:MAIN*/void SEG_Disp(uint8 dat)P0 = SEG_datadat;HC138_A0 = 0;HC138_A1 = 0;HC138_A2 = 0;void KEY_Scan(void)uint8 temp;P3 = 0xf0;/设置输入输出/*-扫描第一行-*/P3 = 0xfe;/第一行输出 0temp = P3;/读取P3的值temp = temp & 0xf0;/屏蔽高4位,if( temp!= 0xf0)/判断是否有键按下Delay_ms(100);if( temp!= 0xf0)/判断是否有键按下switch(temp)

11、/做键值处理case 0xe0:key_value = 1;break;case 0xd0:key_value = 2;break;case 0xb0:key_value = 3;break;case 0x70:key_value = 4;break;/有键按下/temp = temp & 0xf0;/判断按键有没有松开,如果按键松开程序继续执行,/如果没有松开,不断读取P3口的值来作为while的判断条件while(temp!=0xf0)/等待松开按键temp = P3;/读取P3的值temp = temp & 0xf0;/屏蔽高4位,/*-扫描第二行-*/P3 = 0xfd

12、;/第二行输出 0temp = P3;/读取P3的值temp = temp & 0xf0;/屏蔽高4位,if( temp!= 0xf0)/判断是否有键按下Delay_ms(100);if( temp!= 0xf0)/判断是否有键按下switch(temp)/做键值处理case 0xe0:key_value = 5;break;case 0xd0:key_value = 6;break;case 0xb0:key_value = 7;break;case 0x70:key_value = 8;break;/有键按下/temp = temp & 0xf0;/判断按键有没有松开,如果

13、按键松开程序继续执行,/如果没有松开,不断读取P3口的值来作为while的判断条件while(temp!=0xf0)/等待松开按键temp = P3;/读取P3的值temp = temp & 0xf0;/屏蔽高4位,/*-扫描第三行-*/P3 = 0xfb;/第二行输出 0temp = P3;/读取P3的值temp = temp & 0xf0;/屏蔽高4位,if( temp!= 0xf0)/判断是否有键按下Delay_ms(100);if( temp!= 0xf0)/判断是否有键按下switch(temp)/做键值处理case 0xe0:key_value = 9;break;

14、case 0xd0:key_value = 0;break;case 0xb0:flag = 1;break;/"+"case 0x70:flag = 2;break;/"-"/有键按下/temp = temp & 0xf0;/判断按键有没有松开,如果按键松开程序继续执行,/如果没有松开,不断读取P3口的值来作为while的判断条件while(temp!=0xf0)/等待松开按键temp = P3;/读取P3的值temp = temp & 0xf0;/屏蔽高4位,/*-扫描第四行-*/P3 = 0xf7;/第二行输出 0temp = P3

15、;/读取P3的值temp = temp & 0xf0;/屏蔽高4位,if( temp!= 0xf0)/判断是否有键按下Delay_ms(100);if( temp!= 0xf0)/判断是否有键按下switch(temp)/做键值处理case 0xe0:key_value = 3;break;case 0xd0:key_value = 4;break;case 0xb0:key_value = 5;break;case 0x70:key_value = 6;break;/有键按下/temp = temp & 0xf0;/判断按键有没有松开,如果按键松开程序继续执行,/如果没有松开

16、,不断读取P3口的值来作为while的判断条件while(temp!=0xf0)/等待松开按键temp = P3;/读取P3的值temp = temp & 0xf0;/屏蔽高4位,bit BUSY(void)bit Bit;P0 = 0x00;RS = 0;RW = 1;EN = 1;Delay_ms(1);Bit = (bit)(P0 & 0x80);/最高位为忙信号位EN = 0;return Bit;void Write_cmd(uint8 cmd)/while(BUSY();RS = 0;/写指令RW = 0;/写操作EN = 0;/P0 = cmd;/发送命令Dela

17、y_ms(5);EN = 1;P0 = cmd;/发送命令Delay_ms(5);EN = 0;/拉低ENvoid Write_dat(uint8 dat)/while(BUSY();RS = 1;RW = 0;EN = 0;P0 = dat;Delay_ms(5);EN = 1;P0 = dat;Delay_ms(5);EN = 0;void LCD14432_Init(void)_nop_(); /延时1usWrite_cmd(0x30); /使用基本指令集Delay_ms(5);Write_cmd(0x0c);/功能:显示开关ON ,游标OFF,反白OFF Delay_ms(5);Wri

18、te_cmd(0x01); /清除显示屏幕,把DDRAM 位址计数器调整为"00H"Delay_ms(5);Write_cmd(0x06);/AC自动加1,画面不动/Write_cmd(0x07);/AC自动加1,画面移动_nop_(); /延时1usvoid Delay_ms(uint16 z)uint16 x,y;for(x=z;x>0;x-)for(y=124;y>0;y-);void Timer0_Init(void)TMOD = 0x01;/工作在方式1/TH0 = (65535-50000)/256 /TL0=/TH0 = 0x3C;/定时器初值50

19、ms/TL0 = 0xAF;TH0 = 0xfe;/定时器初值0.5msTL0 = 0x3c;EA = 1;/打开总开关ET0 = 1;/开T0中断开关TR0 = 1;/启动定时器void Timer0_IRQ() interrupt 1/TH0 = 0x3C;/定时器初值50ms/TL0 = 0xAF;TH0 = 0xfe;/定时器初值0.5msTL0 = 0x3c;count+;PWM_Out(rate1);/*if(count=20)count= 0;count1+;if(count1=10)count1 = 0;*/uint8 Read_ADConvert(void)uint8 i=0

20、;/计数脉冲uint8 Convert_value = 0;/保存AD转换的值/*-参考时序编写驱动程序-*/Tlc549_Clock = 0;/初始化Tlc549_CS = 1;Wait2us;/延时2USTlc549_CS = 0;Wait2us;/延时2USfor(i=0;i<8;i+)/丢掉前面8个数据Tlc549_Clock = 1;/Wait2us;Tlc549_Clock = 0;Tlc549_CS = 1;/准备转换Wait20us;/等待转换结束Wait20us;Tlc549_CS = 0; /准备读取AD数据for(i=0;i<8;i+)/读取数据(下降沿)Tlc549_Clock = 1;Convert_value = Convert_value <<1;if(Tlc549_Dout=1)/根据数据线上得数据,将

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论