float vol=0; AD0INT = 0; EA = 0;
measureVol = ADC0H << 8; measureVol += ADC0L; vol= measureVol; vol = vol * 2.3597; measureVol = (int)vol;
//DisBuf[3] = (measureVol % 10); //DisBuf[2] = (measureVol / 10) % 10; //DisBuf[1] = (measureVol /100) % 10; //DisBuf[0] = (measureVol /1000) | 0x80; EA = 1; }
void OscInit() {
OSCXCN = 0x67;
Delay(0x100);
while((OSCXCN & 0x80) != 0x80) {
Delay(10); }
Delay(0x100);
// 切换到外部晶体
// 等待稳定
// 允许外部晶体
OSCICN = 0X88; }
// 端口初始化
// 注:7219对应的端口需要配置成推挽方式 void PortInit() {
32
P0MDOUT = 0X00; P1MDOUT = 0X70; P2MDOUT = 0X00; P3MDOUT = 0X00; XBR2 = 0X40;
// 漏极开路 // 漏极开路 // 漏极开路
// 漏极开路,P31推挽
// 使能交叉开关, 弱上拉全局允许
P74OUT = 0x3C; }
/////////////////////////////////////////////////////////////////////// // 初始化
/////////////////////////////////////////////////////////////////////// void Initial() {
P0 = 0xff; P1 = 0xff; P2 = 0xff; P3 = 0xff;
DisBuf[0] = 0; DisBuf[1] = 11; DisBuf[2] = 4; DisBuf[3] = 5;
DisplayInterval = 0;
//------------------------------------------------------------------ DIN7219 = 1; LOAD7219 = 1; CLK7219 = 0;
// initial 7219
Send7219(0x09,0x00); // decode mode for all display
Send7219(0x0A,0x01); // set brightness to half
Send7219(0x0B,0x03); // display 0, 1, 2, 3
Send7219(0x0C,0x01); // display in normal states
Send7219(0x0F,0x00); // leave test mode
33
//------------------------------------------------------------------ }
void DAC_Init() //DA输出初始化 {
DAC0H=0x00; DAC0L=0x00; DAC1H=0x00; DAC1L=0x00; DAC0CN=0x80;
//开启并选择DAC0、DAC1的工作方式(输出更新在
//DAC1输出0V
//DAC0输出0V(即初始电压为0V)
写DACXH时)
DAC1CN=0x80; }
void ADC0Init (void) {
REF0CN = 0x03; // enable temp sensor, on-chip VREF, and VREF output buffer
AMX0CF = 0X00;
AMX0SL = 0x00; // select AIN00
ADC0CF = (16000000/2500000) << 3; // ADC conversion clock = 2.5MHz ADC0CF |= 0x00; //PGA gain = 1 ADC0CN = 0x84; EIE2 |= 0x02;
EA=1; // enable ADC interrupts }
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 定时器3初始化 //
// 定时器3用来定时启动ADC0
///////////////////////////////////////////////////////////////////////////////////////////////////////////// sfr16 TMR3RL = 0x92; // Timer3 reload value sfr16 TMR3 = 0x94; // Timer3 counter void Timer3Init (void) {
TMR3RL = 0x0300; // 500Hz
34
TMR3 = 0xffff; EIE2 &= ~0x01; TMR3CN = 0x04; }
void Time0_and_Time1_Init() {
CKCON = 0x00; TMOD = 0x11;
// set to reload immediately // disable Timer3 interrupts
// start Timer3,using system clock
/**/
//所有定时器时钟使用系统时钟的12分频
//定时器1、2皆设为16位
TF0 = 0;
TF1 = 0; }
void DC() {
int vol;
if(g_workmode==WK_SET)return;
i=50;
g_code=code_tab[i]; SetDAC0(g_code); SetDAC1(0);
vol=g_code*0.02483; DisBuf[0]=Tab[12]; DisBuf[1]=Tab[13];
DisBuf[2]=Tab[vol/10]| 0x80; DisBuf[3]=Tab[vol];
LED_PRESET = 1; LED_DC_MOD = 0; LED_TRI = 1;
LED_AUTO_SCAN = 1; LED_SQU = 1;
g_workmode=WK_DC; ET0=0; TR0=0; //close Timer0. ET1=0;
35
TR1=0; //CLOSE TIMER1. TMR3CN|=0x04; //OPEN timer3 EIE2 |= 0x02;
P5=0x01; P6=0x00; }
void preset() {
DC(); }
void square() {
if(g_workmode==WK_DC||g_workmode==WK_TRI) {
LED_PRESET = 1; LED_DC_MOD = 1; LED_TRI = 1;
LED_AUTO_SCAN = 1; LED_SQU = 0;
TMR3CN&=0xFB; //close timer3. EIE2 &= ~0x02; TH1=0xFC; //open timer1,delay 1ms,f=1kHz. TL1=0x18; ET1=1; TR1=1;
P5=0x00; P6=0x00;
DAC1L=0xFF; //DAC1:1.25V DAC1H=0x07;
DAC0L=0x00; //DAC0:0V DAC0H=0x00;
g_workmode=WK_SQU;
DisBuf[0]=Tab[14]; DisBuf[1]=Tab[10];
36
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库电子设计竞赛论文-简易稳压电源的设计(8)在线全文阅读。
相关推荐: