数控直流电流源程序

合集下载

数控直流电流源完整版(电路+程序)

数控直流电流源完整版(电路+程序)

题目名称:数控直流电流源摘要:该数控直流电流源以精密压控电流源为核心、用单片机、DAC组成控制电路,引入“S类”反馈控制功率放大电路,实现超精密电流控制、具备精准的扩流能力、低失调、有步进、同时带有丰富扩展功能的精密电流源。

经过ADC采样,完成输出电流显示功能,并使输出范围覆盖0~2A,是理想的电流源解决方案。

关键词:精密电流源低失调S类功率放大器Abstract:The direct current source of numerical control bases on accurate VCCS, using MCU and DAC as controller kernel, importing circuit of power amplification of type S with feedback control; achieves ultra accurate current control; has low offset and excellent capacity for current enlarging; has step by step motion. At the same time, it provides abundance extended functions. According to the ADC sampling, it carries out the function of displaying the current output, meanwhile it achieves a range of 0 to 2A. Above all, it is an ideal solution of current source.Keyword: accurate current source , low offset , power amplification of type S目录1方案论证与比较 (3)1.1精密压控电流源方案论证 (3)1.2扩流模块方案论证 (3)1.3电流检测方案论证 (4)1.4功率输出级电源方案论证 (4)1.5其它模块电源方案论证 (4)2 系统设计 (5)2.2单元电路设计 (6)2.2.1 压控电流源单元电路设计 (6)2.2.2S类功率放大器电路设计(理论推导和证明) (7)2.2.3 数控电路设计 (10)2.2.4 大功率电源模块 (11)3 软件设计 (11)4系统测试 (13)4.1测试仪器 (13)4.2测试方法 (13)4.3测试数据 (14)5 结论 (15)参考文献: (15)附录: (16)附1:元器件明细表 (16)附2:仪器设备清单 (16)附3:电路图图纸 (16)附4:程序清单 (19)附5:使用说明 (24)1方案论证与比较本系统主要由精密的电流源模块、S类扩流模块、电流检测模块、数控模块、以及大功率的电源模块组成,如图1所示。

(数控加工)数控直流电流源设计报告精编

(数控加工)数控直流电流源设计报告精编

(数控加工)数控直流电流源设计报告数控直流电流源一、设计任务和技术要求1.设计壹个数控直流电流源。

2.输出电流0~99mA,手动步进1mA增、减可调,误差不大于0.01mA。

3.具有输出电流大小的数码显示。

4.负载供电电压+12V,负载等效阻值100Ω。

5.电路应具有对负载驱动电流较好的线性控制特性。

6.设计电路工作的直流供电电源电路。

二、系统原理概述本设计要求设计出壹个数控的直流电源,且且输出电流为0~99mA,能够手动控制增减。

在此采用数模转换的原理,只要产生和0~99mA电流相对应的数字量(我们取数字量为0~99),再使用D/A转换器转换为模拟电压量,最后再用V/I转换器将电压量转换为和电压量相对应的电流量即可。

为控制输出电流手动步进为1mA增、减可调,我们只要保证数字量(0~99)——电压量(0~9.9V)——电流量(0~99mA)相对应,通过控制数字量手动增减步进为1可调即可。

综上,整个系统的原理框图如图壹所示:图一系统原理框图三、方案论证1.直流稳压电源电路单元小功率稳压电源由电源变压器、整流电路、滤波电路和稳压电路四个部分组成。

如图二所示:图二稳压电源组成示意图方案壹:输出可调的开关电源开关电源的功能元件工作在开关状态,因而效率高,输出功率大;且容易实现短路保护和过流保护,可是电路比较复杂,设计繁琐,在低输出电压时开关频率低,纹波大,稳定度极差,因此在本设计中不适合此方案。

方案二:由固定式三端稳压器组成由固定式三端稳压器(7805、7812、7912)输出脚V0、输入脚V i和接地脚GND组成,它们的输入端接电容能够进壹步滤波,输出端接电容能够改善负载的瞬间影响,且且此电路也比较稳定,实现简单。

因此在此采用方案二,电路原理图如图三所示:图三固定三端式直流稳压电源电路2.手动增减数字量产生单元方案壹:74LS163为可预置的4位二进制同步加法计数器。

采用俩片74LS163运用反馈清零或者反馈置数法构成十进制计数器,再将俩片73LS163构成2位十进制加法计数器。

数控直流电流源课程设计与制作

数控直流电流源课程设计与制作

课程设计任务书一、设计题目:数控直流电流源的设计与制作二、主要内容及要求1.功能与主要技术指标(1)输出电流:0∽1A步进可调,调整步距4mA;误差≤0.1mA(2)输入电压:12V;(3)显示:输出电压值用LED数码管显示;(4)电流调整:由“+”、“-”两按键分别控制输出电流的步进增减;(5)输出电流预置:输出电流可预置在0∽1A之间的任意一个值;(6)其它:自制电路工作所需的直流稳压电源,输入电压为±12V,+5V;三、进度安排任务设计2012年3月12日—2012年3月16日练习制作2012年3月19日—2012年3月23日数控直流电流源设计与制作一、设计任务和技术要求1、设计一个数控直流电流源2、输出电流0~1A,手动步进4mA增、减可调,误差不大于0.1mA;3、负载供电电压+12V,负载等效阻值10欧姆;4、电路应具有对负载驱动电流较好的线性控制特性;二、总体设计方案原理及结构框图数控直流电流源共有六部分组成,其中输出电流的调节是通过“+” 和“-”两个按键来操作的;步进电流精确到0.1A以手动控制可逆计数器分别作加,减计数;控制数字量为8位二进制码:00000000~11111111增、减变化。

可逆计数器的二进制数字输出分两路运行,一路用于驱动数字显示电路,精确显示当前输出电流值;另一路进入数模转换电路(D/A转换电路);数模转换电路将数字量按比例,转换成模拟电流,然后经过射极跟随器的控制,调整输出级,使输出稳定直流电流。

图2-1电路结构原理框图三、部分模块原理及结构图1、74LS193芯片74LS193具有同步可逆计数功能、异步清零功能、异步并行置数和保持功能。

与是为74LS193级联时使用的。

级联时只要把低位的端、端分别与高位的CP U、CP D连接起来,各芯片的CR 端连接在一起, 端连接在一起,就可以了。

图3-1 74LS193引脚排列图和逻辑功能示意图CR异步清零端,高电平有效;异步置数,低电平有效;CPU加法计数脉冲输入端,上升沿触发;CPD减法计数脉冲输入端,上升沿触发;进位脉冲输出端;BO COBOCOLDLDCO借位脉冲输出端。

数控直流电流源F

数控直流电流源F

数控直流电流源(F题)设计与总结报告摘要:本设计基于单片机控制技术,系统以单片机AT89S51为核心,TLC5615,TLC1549,ZLG7289等元件构成辅助电路,采用D/A转换输出可变电压和利用压控恒流源,差动放大与信号调节电路实现对数控直流电流源的控制。

系统可预置输出电流,通过采样将实际输出反馈到单片机中构成闭环系统,进行比较、调整,提高了电流的输出精度。

关键词:单片机、压控恒流源、D/A转换Abstract:This design based on the Singlechip Control Technology. The system takes singlechip AT89S51 as the core, and takes the TLC5615, TLC1549, ZLG7289 and other devices to constitute the auxiliary circuit. It produces changeable voltage by using D/A conversion. It implements the control to the numerical controlled direct current source by using the voltage controlled constant current source, differential amplification and signal adjustment circuit. The system can preset output current, feed back the actual output through sampling to the singlechip to constitute the closed loop system, carry on comparison and adjustment, and increase the electric current output precision.Keywords: singlechip, voltage controlled constant current source, D/A conversion.目录1. 系统设计 (3)1.1 设计要求 (3)1.2 总体设计方案 (3)1.2.1 设计思路 (3)1.2.2 方案论证与比较 (3)1.2.3 系统组成 (5)2. 单元电路设计 (5)2.1 D/A转换电路 (5)2.2键盘显示电路 (6)2.3 压控恒流源电路 (6)2.4电源电路 (7)3. 软件流程设计 (8)4. 系统测试 (9)4.1 测试使用的仪器 (9)4.2 指标测试和测试结果 (9)4.2.1 输出电流的测试 (9)4.2.2输出电流与给定值偏差的绝对值的测试 (9)4.2.3 步进值的测试 (10)4.3 误差分析 (10)5. 结束语 (11)参考方献 (11)附录1 元器件明细表 (11)附录2 程序清单 (12)附录3 系统使用说明 (20)1.系统设计1.1设计要求1、基本要求(1)输出电流范围:200mA~2000mA;(2)可设置并显示输出电流给定值,要求输出电流与给定值偏差的绝对值≤给定值的1%+10 mA;(3)具有“+”、“-”步进调整功能,步进≤10mA;(4)改变负载电阻,输出电压在10V以内变化时,要求输出电流变化的绝对值≤输出电流值的1%+10 mA;(5)纹波电流≤2mA;(6)自制电源。

数控直流源的设计

数控直流源的设计

简易数控直流电流源摘要基于STC89C52单片机作为整机的控制单元,通过功率放大电路、ICL7107电压测量等设计实现了一个简易数控直流电源。

其电压可预置,步进为0.1V,输出电压范围 0—9.9V。

输出电流为500mA。

步进调节输出电压幅度、预置电压和实测电压均可通过数码管显示。

本系统调整速度快,效率高,通用,输出纹波小等优点。

关键字:数控直流源步进加减功率放大数码管显示1引言在常规电路中,我们一般使用普通的自制电源。

输出电压V 15 。

然而却没有数码显示、电压预置和步进增减功能。

基于此,我们本次设计一个直流电流源。

该电源设计满足以下基本要求:(1)输出电压:范围0-9.9V ,步进0.1V 。

纹波不大于10mV ;(2)输出电流:500mA ;(3)输出电压值由数码管显示;(4)由“+”、“-”两键分别控制输出电压步进增减;(5)为实现上述几部件工作,自制一稳定直流电源,±15V 、± 5V 输出。

系统的设计框图如图1所示图(1)总体设计框图2方案设计2. 系统设计2.1设计思路采用单片机作为控制器的简易数控直流电源设计方案框图如图一所示。

STC89C52完成系统的数控功能。

运放电路为功率放大单元的输入级,通过OTL 电路进行功率放大。

ICL7107和数码管为实际电压测量的反馈单元,为了达到设计的要求,我们需进行功率放大和显示电压。

本次设计的关键在于对DAC0832的控制和ICL71017的应用。

2.2方案比较与选择通过以上分析我们拟定如下方案:方案一:此方案采用传统的调整管方案,主要采用一套计数器完成系统的控制功能,其中二进制计数器的输出经过D/A变换后去控制误差放大的基准电压,以控制输出步进。

十进制计数器通过译码后驱动数码管显示输出电压值,为了使系统工作正常,必须保证双计数器同步工作。

从而,难以控制单片机。

方案二:此方案的控制部分采用STC89C52单片机,输出部分采用ICL7107与数码管结合。

简易数控直流电源的程序

简易数控直流电源的程序
void square();
void keycan_bjys();
void keycan_bxsz();
void write_com(uchar com);
void write_date(uchar date);
void init_kjhm();
void init_bjhm();
void init_yshm();
void init_bxxzhm();
void init_trigle();
void init_trap();
void init_saw();
void init_square();
void init();
void main()
{ init_kjhm();
init(); //初始化子程序
if(key0e(1)
{ keycan_bjys();
if(key3==0)
{ dula=1;
P1=0xff;
dula=0;
wr_da=0;
}
}
void trap() //梯形波
{ num=0;
for(num=0;num<121;num++)
{ P0=num;
wr_da=0;
}
delay(5);
if(num1==3)
{ init_saw();
while(1)
{ saw();
if(key0!=0)break;
}
}
if(num1==4)
{ uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);

数控直流电流源设计

数控直流电流源设计

摘要:本次主要任务是使用Proteus、Multisim、PSPICE、TINA-TI、Matlab等电路仿真软件,设计仿真一个简易数控恒流源电路方案以微控制器为核心,设计一数字式直流电流控制系统,实现了可控的恒电流源.系统以89c52单片机为控制核心,通过12位D/A MAX5822控制输出电流、12位A/D MAX1241对输出电流进行检测,利用电流串连负反馈特性采用OP07和达林顿管组成的恒流源,实现一种宽范围、高精度、低纹波、带负载能力强的直流电源。

此外,该电流源可以通过键盘进行预置调整设定值,且输出通过LCD显示。

本次仿真所用的软件主要是Proteus与Multisim。

关键词:数控直流电流源 89C52 MAX5822 MAX1241 仿真目录1.设计任务与要求 (2)1.设计任务与要求 (3)1.1任务 (3)1.2要求 (3)2. 方案论证与比较 (4)2.1. 数控模块 (4)2.2.恒流源电路模块 (4)3 系统硬件组成及各部分的原理分析 (5)3.1数控电流输出及测量模块 (5)3.1.1数控电流输出 (5)3.1.2 测量电流输出 (6)3.2键盘与显示电路 (7)3.3恒流源电路 (7)3.4供电电路 (9)4 系统软件设计 (9)4.1软件的结构 (9)4.1软件流程图 (10)5电路各部分的仿真结果 (11)5.1显示和按键控制电路仿真 (11)5.2 DA转换仿真 (11)5.3 AD转换仿真 (12)5.4恒流源电路仿真 (13)6设计总结 (14)7附录 (15)1.设计任务与要求1.1任务设计并制作数控直流电流源。

输入交流200~240V,50Hz;输出直流电压≤10V1.2要求用仿真软件对电路进行设计并仿真,使其满足以下要求:1、基本要求(1)输出电流范围:200mA~2000mA;(2)可设置并显示输出电流给定值,要求输出电流与给定值偏差的绝对值≤给定值的1%+10 mA;(3)具有“+”、“-”步进调整功能,步进≤10mA;(4)改变负载电阻,输出电压在10V以内变化时,要求输出电流变化的绝对值≤输出电流值的1%+10 mA;(5)纹波电流≤2mA;(6)自制电源。

数控直流电流源设计制做

数控直流电流源设计制做

数控直流电流源1 方案比较,设计与论证1.1 控制方案比较方案一(见图1)此方案是传统的模拟PID控制方案,其优点是不占用CPU处理器的时间,对处理器性能的要求比较低。

但模拟PID控制方式的参数不易匹配,调节时间长,难以把精度做得很高,并且难以实现题中要求的良好的人机交互功能。

图1 控制方案一框图方案二(见图2)此方案采用摩托罗拉16位DSP芯片56F807为核心处理器来实现,该平台具有高处理速度,适合实现复杂的算法和控制。

这种方案可以方便地实现PID的控制算法。

本设计采用了方案二。

图2 控制方案二框图1.2 检测方案比较方案一 直接对负载进行采样直接对负载进行采样简单易行。

但由于负载电阻为可调节电阻,输出可能有电流可能会受接触电阻的变化而不稳定,故不宜选取。

方案二 对采样电阻进行采样采样电阻采用标准精密电阻,阻值稳定,将阻值的变化对电流的影响降低到最小程度。

另外,对采样电阻进行采样,有效避免了外接测量电路对电流的影响。

因此采用方案二。

2 理论分析2.1 PID 控制算法PID 是一种在单片机控制中常用的算法, PID 控制由于其具有控制方法简单、稳定性好、可靠性高和易于现场调试等优点,被广泛应用于工业过程控制。

其输入e (t)与输出u (t)的关系为[1]⎰++=t d i p dtde(t)K d e(τK e(t)K u(t)0)τ 数字PID 控制算法是以模拟PID 调节器控制为基础的,由于单片机是一种采样控制,它只能根据采样时刻的偏差计算控制量。

但是如果采样周期T 取得足够小,采用数值计算的方法逼近可相当准确,被控过程与连续控制十分接近。

离散化后的PID 算式为:[1]()001u e e T T e T T e K u ij i i d j i i i +⎥⎦⎤⎢⎣⎡-++=∑=- 式中:K : 比例系数u o : 偏差为零时的控制作用T i : 积分时间T d : 微分时间T : 采样时间以上公式称为位置式算法。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数控直流电流源程序/*跳线说明:1)将EXP-LM3S811板卡上JP9、JP13跳至左侧(短接1-2);2)将EXP-min_system_board板卡上JP13、JP14、JP15、JP16跳至右侧(短接2-3。

操作过程:1)将EXP-min_system_board板卡上K1拨动开关拨至ON状态,给液晶上电;2)调节RP1电位器,使液晶有合适的背光;3)上电,编译并下载程序,复位后全速运行程序;观察液晶显示的内容,再修改程序使之显示自己的内容。

*/#include "systemInit.h"#include "ADS7886.h"#include "TLV5616.h"#include "timer.h"#define CTL_PERIPH SYSCTL_PERIPH_GPIOC// 控制液晶所用的片内端口外设定义#define CTL_PORT GPIO_PORTC_BASE#define SCK GPIO_PIN_4 // 定义信号SCK#define SID GPIO_PIN_5 // 定义信号SID#define CS GPIO_PIN_6 // 定义信号CS#define PSB GPIO_PIN_7 // 定义信号PSB#define SCK_L GPIOPinWrite(CTL_PORT,SCK,0x00) // 定义信号输出低电平#define SID_L GPIOPinWrite(CTL_PORT,SID,0x00)#define CS_L GPIOPinWrite(CTL_PORT,CS,0x00)#define PSB_L GPIOPinWrite(CTL_PORT,PSB,0x00)#define SCK_H GPIOPinWrite(CTL_PORT,SCK,0xFF) // 定义信号输出高电平#define SID_H GPIOPinWrite(CTL_PORT,SID,0xFF)#define CS_H GPIOPinWrite(CTL_PORT,CS,0xFF)#define PSB_H GPIOPinWrite(CTL_PORT,PSB,0xFF)#define SID_READ GPIOPinRead(CTL_PORT,SID)// 定义读回的数据#define SID_IN GPIOPinTypeGPIOInput(CTL_PORT,SID) // 定义SID信号为输入#define SID_OUT GPIOPinTypeGPIOOutput(CTL_PORT,SID) //定义SID信号为输出#define LED_PERIPH SYSCTL_PERIPH_GPIOB#define LED_PORT GPIO_PORTB_BASE#define LED GPIO_PIN_5#define KEY_PERIPH SYSCTL_PERIPH_GPIOD// KEYS所接的端口#define KEY_PORT GPIO_PORTD_BASE#define KEYGPIO_PIN_7|GPIO_PIN_6|GPIO_PIN_5|GPIO_PIN_4|GPIO_PIN_3|GPIO_ PIN_2|GPIO_PIN_1|GPIO_PIN_0#define KEY_HGPIO_PIN_7|GPIO_PIN_6|GPIO_PIN_5|GPIO_PIN_4#define KEY_LGPIO_PIN_3|GPIO_PIN_2|GPIO_PIN_1|GPIO_PIN_0#define key_h_in GPIOPinTypeGPIOInput(KEY_PORT,KEY_H) #define key_l_in GPIOPinTypeGPIOInput(KEY_PORT,KEY_L) #define key_h_outGPIOPinTypeGPIOOutput(KEY_PORT,KEY_H)#define key_l_outGPIOPinTypeGPIOOutput(KEY_PORT,KEY_L)#define SysCtlPeriClkGating SysCtlPeripheralClockGating //定义睡眠函数#define SysCtlPeriSlpEnable SysCtlPeripheralSleepEnable#define BitRate 115200 // 设定SPI的波特率#define DataWidth 8 // 设定SPI的数据宽度unsigned char AC_TABLE[]={0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87, //第一行汉字位置0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97, //第二行汉字位置} ;//开始菜单欢迎界面unsigned char Hello1[]="欢迎使用——数控" ;unsigned char Hello2[]="直流电流源" ;unsigned char Hello3[]="制作人: " ;unsigned char Hello4[]="chenfangjie";//一级菜单1unsigned char menu1_1[]="请输入(20~2000):"; // 选择提示unsigned char menu1_2[]="设值: mA ";//一级菜单1unsigned char menu2_1[]="设定值: mA"; // 选择提示unsigned char menu2_2[]="读取值: A";unsigned char key_val=0; //键值全局变量int A;void keyBoardInit(void){SysCtlPeripheralEnable(KEY_PERIPH); //D口使能开GPIOPinTypeGPIOOutput(KEY_PORT,KEY_H); //扫描信号输出GPIOPinTypeGPIOInput(KEY_PORT,KEY_L); //按键信号输入}//键盘扫描程序void keyBoard_scan(void){//如下依次输出行扫描线//如果有键按下则扫描列线,并获得键值//按键释放判断unsigned char key_h,key_l;key_val=0;key_l_out;key_h_out;GPIOPinWrite(KEY_PORT,KEY,0xf0);key_h_in;key_h=GPIOPinRead(KEY_PORT,KEY_H);if((GPIOPinRead(KEY_PORT,KEY_H)&0xf0)!=0xf0){SysCtlDelay(5*(TheSysClock/3000));if((GPIOPinRead(KEY_PORT,KEY_H)&0xf0)!=0xf0){key_h=GPIOPinRead(KEY_PORT,KEY_H)&0xf0;key_h_out;key_l_out;GPIOPinWrite(KEY_PORT,KEY,0x0f);key_l_in;key_l=GPIOPinRead(KEY_PORT,KEY_L)&0x0f;key_val=key_h+key_l;while(key_l!=0x0f){key_l=GPIOPinRead(KEY_PORT,KEY_L)&0x0f;}switch(key_val){case 0xe7: key_val=13;break;case 0xeb: key_val=9;break;case 0xed: key_val=5;break;case 0xee: key_val=1;break;case 0xd7: key_val=14;break;case 0xdb: key_val=10;break;case 0xdd: key_val=6;break;case 0xde: key_val=2;break;case 0xb7: key_val=15;break;case 0xbb: key_val=11;break;case 0xbd: key_val=7;break;case 0xbe: key_val=3;break;case 0x77: key_val=16;break;case 0x7b: key_val=12;break;case 0x7d: key_val=8;break;case 0x7e: key_val=4;break;}}}}// LCM端口初始化void init(void){SysCtlPeripheralEnable( CTL_PERIPH );// 使能所用的端口GPIODirModeSet(CTL_PORT, (SCK | PSB | CS ) ,GPIO_DIR_MODE_OUT);// 设置信号的方向GPIOPadConfigSet(CTL_PORT, (SCK | PSB | CS ),GPIO_STRENGTH_8MA,GPIO_PIN_TYPE_STD_WPU); //设置IO的驱动能力SysCtlPeripheralEnable(LED_PERIPH);GPIOPinTypeGPIOOutput(LED_PORT, LED);GPIOPadConfigSet(LED_PORT, LED, GPIO_STRENGTH_8MA,GPIO_PIN_TYPE_STD_WPU);}// 串行方式发送一个字节void SendByte(unsigned char Dbyte){unsigned char i ;for(i=0 ;i< 8 ;i++){SCK_L ;SID_OUT;if (Dbyte & 0x80){SID_H;}else{SID_L;}Dbyte=Dbyte<<1;SCK_H;SCK_L;}}// 串行方式接收一个字节unsigned char ReceiveByte(void){unsigned char i,temp1,t,temp2;temp1=temp2=0;for(i=0;i<8;i++){temp1=temp1<<1;SCK_L;SCK_H;SCK_L;SID_IN;t=SID_READ;if (t){temp1++;}}for(i=0 ;i<8 ;i++){temp2=temp2<<1;SCK_L;SCK_H;SCK_L;SID_IN;t=SID_READ;if (t){temp2++;}}return ((0xf0&temp1)+(0x0f&temp2)); }// 判断是否忙碌void CheckBusy( void ){do SendByte(0xfc); //字节格式:11111,RW(1),RS(0),0while(0x80&ReceiveByte());// 判断是否忙碌:BF(.7)=1 Busy}// 向液晶发送命令void WriteCommand( unsigned char Cbyte ){CS_H;CheckBusy();SendByte(0xf8); //字节格式:11111,RW(0),RS(0),0SendByte(0xf0&Cbyte);// 高四位SendByte(0xf0&Cbyte<<4);// 低四位(先执行< ;< ;)CS_L;}// 向液晶发送显示数据void WriteData( unsigned char Dbyte )//显示字符{CS_H;CheckBusy();SendByte(0xfa); //字节格式:11111,RW(0),RS(1),0SendByte(0xf0&Dbyte);// 高四位SendByte(0xf0&Dbyte<<4);// 低四位(先执行< ;< ;)CS_L;}// 延时函数void Delay(unsigned int MS){unsigned char us,usn;while(MS!=0){usn = 2;while(usn!=0){us=0xf5 ;while (us!=0){us-- ;};usn--;}MS--;}}// 维捷登测试架专用延时函数void DelayKey(unsigned int Second , unsigned int MS100){ //输入精确到0.1S,是用","unsigned int i;for(i=0 ;i<Second*100+MS100*10 ;i++){Delay(10) ;}}// 文本区清RAM函数void LcmClearTXT( void ){unsigned char i ;WriteCommand(0x30);// 8BitMCU,基本指令集合WriteCommand(0x80);// AC归起始位for(i=0 ;i<64 ;i++)WriteData(0x20);}// 液晶初始化函数void LcmInit( void ){WriteCommand(0x30);// 8BitMCU,基本指令集合WriteCommand(0x03);// AC归0,不改变DDRAM内容WriteCommand(0x0c);// 显示ON,游标Off,游标位反白OFFWriteCommand(0x01);// 清屏,AC归0WriteCommand(0x06);// 写入时,游标右移动}void PutStr(unsigned char row,unsigned char col,unsigned char *puts) {int i=0;WriteCommand(0x30);// 8BitMCU,基本指令集合WriteCommand(AC_TABLE[8*row+col]);// 起始位置for(i=0;puts[i]!='\0';i++){WriteData(puts[i]);}}void DisplayHello(void) //显示欢迎菜单{LcmClearTXT();PutStr(0,0,Hello1);PutStr(1,0,Hello2);DelayKey(2,0);PutStr(0,0,Hello3);PutStr(1,0,Hello4);DelayKey(2,0);}void DisplayMenu1_1(void) //一级菜单显示{unsigned char a[4];int i=0,j;float v;key_val=0;LcmClearTXT();PutStr(0,0,menu1_1);PutStr(1,0,menu1_2);WriteCommand(0x30);WriteCommand(0x93);while(!(key_val==4)) // 如果按键D没有按下一直显示一级菜单{switch(key_val){case 1:WriteData('0');a[i]=0;i++;while(key_val==1);break;case 2:;break;case 3:;break;case 4:;break;case 5:WriteData('1');a[i]=1;i++;while(key_val==5);break;case 6:WriteData('2');a[i]=2;i++;while(key_val==6);break;case 7:WriteData('3');a[i]=3;i++;while(key_val==7);break;case 8:;break;case 9:WriteData('4');a[i]=4;i++;while(key_val==9);break;case 10:WriteData('5');a[i]=5;i++;while(key_val==10);break;case 11:WriteData('6');a[i]=6;i++;while(key_val==11);break;case 12:;break;case 13:WriteData('7');a[i]=7;i++;while(key_val==13);break;case 14:WriteData('8');a[i]=8;i++;while(key_val==14);break;case 15:WriteData('9');a[i]=9;i++;while(key_val==15);break;case 16:;break;}}i--;if (i==1){A=a[0]*10+a[1];}elseif(i==2){A=a[0]*100+a[1]*10+a[2];}elseif(i==3){A=a[0]*1000+a[1]*100+a[2]*10+a[3];if(A>2000)DisplayMenu1_1();}for(j=0;j<=i;j++){a[j]=a[j]+0x30;}LcmClearTXT();PutStr(0,0,menu2_1);PutStr(1,0,menu2_2);PutStr(0,4,a);while(1){while(!(key_val==4)) // 如果按键D没有按下一直显示一级菜单{switch(key_val){case 1:;break;case 2:A++;while(key_val==2);break; //数值加1case 3:A--;while(key_val==3);break; //数值减1case 4:;break;case 5:;break;case 6:;break;case 7:;break;case 8:;break;case 9:;break;case 10:;break;case 11:;break;case 12:;break;case 13:;break;case 14:;break;case 15:;break;case 16:;break;}if(A>=20&&A<=99){a[0]=A/10+0x30;a[1]=A%10+0x30;a[2]=0x20;a[3]=0x20;}if(A>=100&&A<=999){a[0]=A/100+0x30;a[1]=A/10%10+0x30;a[2]=A%10+0x30;a[3]=0x20;}if(A>=1000&&A<=2000){a[0]=A/1000+0x30;a[1]=A/100%10+0x30;a[2]=A/10%10+0x30;a[3]=A%10+0x30;}PutStr(0,4,a);v=(int)(((float)A/1000/2.5)*4096);DA_Write(v);AD_Display();}DisplayMenu1_1();}}// 主函数(程序入口)int main(void){jtagWait();// JTAG口解锁函数clockInit(); // 时钟初始化init();// 端口初始化PSB_L; // 串行方式Delay(100); // 延时LcmInit();// 液晶初始化keyBoardInit(); // 键盘初始化DA_Init();AD_Init();//SysCtlPeriClkGating(true); // 允许在睡眠模式下外设采用寄存器SCGCn配置时钟//SysCtlPeriSlpEnable(KEY_PERIPH); // 允许KEY 所在GPIO端口在睡眠模式下继续工作SysCtlPeripheralEnable( SYSCTL_PERIPH_TIMER0 ); // 使能定时器0外设TimerConfigure(TIMER0_BASE, TIMER_CFG_A_PERIODIC); // 设置定时器0为周期触发模式TimerLoadSet(TIMER0_BASE, TIMER_A, 300000); // 设置定时器装载值:定时10MSTimerIntEnable(TIMER0_BASE, TIMER_TIMA_TIMEOUT); // 设置定时器为溢出中断TimerEnable(TIMER0_BASE, TIMER_A); // 使能定时器0IntEnable(INT_TIMER0A); // 使能定时器0外设//DisplayHello();IntMasterEnable(); // 处理器总中断使能//GPIOPinWrite(LED_PORT, LED,0x00);DisplayMenu1_1(); //一级菜单显示}//定时器中断void Timer0A_ISR(void)// 定时器0中断处理程序{TimerIntClear(TIMER0_BASE, TIMER_TIMA_TIMEOUT); // 清除定时器0中断keyBoard_scan();TimerEnable(TIMER0_BASE, TIMER_A); // 使能定时器0 }。

相关文档
最新文档