单片机可控0-30V可调电源
显示电路
控制板电路图
程序
#include
//#include
#include
#include
#include
#include
#include
#include
#include
#define uchar unsigned char
#define uint unsigned int
#define TRUE 1
#define FALSE 0
#define ad_Temp_flag 0x03 // 温度转换通道
#define ad_Vout_flag 0x04 // 电压转换通道
#define ad_Iout_flag 0x05 // 电流转换检测
#define FAN_ON (PORTB_Bit3 = 1) // FAN 开
#define FAN_OFF (PORTB_Bit3 = 0) // FAN 关
#define D1_ON (PORTA_Bit0 = 0) // D1 开
#define D1_OFF (PORTA_Bit0 = 1) // D1 关
#define D2_ON (PORTA_Bit1 = 0) // D2 开
#define D2_OFF (PORTA_Bit1 = 1) // D2 关
#define D3_ON (PORTA_Bit2 = 0) // D3 开
#define D3_OFF (PORTA_Bit2 = 1) // D3 关
#define D4_ON (PORTB_Bit2 = 0) // D4 开
#define D4_OFF (PORTB_Bit2 = 1) // D4 关
#define D5_ON (PORTA_Bit6 = 0) // D5 开
#define D5_OFF (PORTA_Bit6 = 1) // D5 关
#define D6_ON (PORTA_Bit7 = 0) // D6 开
#define D6_OFF (PORTA_Bit7 = 1) // D6 关
#define DATA164_ON (PORTB_Bit1 = 1) // 74HC164 DATA=1
#define DATA164_OFF (PORTB_Bit1 = 0) // 74HC164 DATA=0
#define CLK164_ON (PORTB_Bit0 = 1) //
#define CLK164_OFF (PORTB_Bit0 = 0) //
#define Temp_out_lo 0x339 // -5℃ 41.56K
#define Temp_out_hi 0x10e // 50℃ 3.588K
uint ad_Temp_result; // 温度转换结果
uint ad_Vout_result; // 电压转换结果
uint ad_Iout_result; // 电流转换结果
uint Vout_disp;
uint Iout_disp;
uint Iout_adj;
uchar time_cnt1;
uchar adc_get_flag;
//#pragma vector=0x10;
//__interrupt void TIMER2_OVF_Server(void);
void mcu_init(void); // I/O初始化,PWM初始化
void adc_init(void); // ADC初始化
uint adc_get(uchar adc_ch); // 启动AD转换,并返回转换值
void Vout_adc_get(void); // 电压检测
void Temp_adc_get(void); // 温度检测
void Iout_adc_get(void); // 电流检测
//数码管显示代码定义
__flash uchar disp_led[10] @0x0040 =
{
0x0a, // 0
0x7b, // 1
0x4c, // 2
0x58, // 3
0x39, // 4
0x98, // 5
0x88, // 6
0x5b, // 7
0x08, // 8
0x18, // 9
};
/******************************************************************************/
//延时函数
void delay_1us(void) // 1us延时函数
{
asm("nop");
}
void delay_nus(uchar n) // N us延时函数
{
for(;n>0;n--)
{
delay_1us();
}
}
// 内部晶振频率为8MHz
void delay_1ms(void) // 1ms延时函数
{
uint i;
for(i=1142;i>0;i--); // 8*143-2
}
void delay_nms(uchar n) // N ms延时函数
{
for(;n>0;n--)
{
asm("wdr"); // 喂狗
delay_1ms();
}
}
/*******************************************************************************
函数名:mcu_init()
作用:I/O初始化,PWM初始化
输入:无
返回值:无
*******************************************************************************/
void mcu_init(void)
{
SREG |= 0x80; // 全局中断使能
DDRB = 0x0f; // PB口全部为输出
PORTB = 0x04; // 初始化PB口
DDRA = 0xc7; // PA3,PA4,PA5为输入
PORTA = 0xc7; // 初始化PA口
CLKPR = 0x80; // CLKPCE=1 修改系统时钟分频使能
CLKPR = 0x00; // 1分频
TCCR1B = 0x00; // TIMER1停止计数
TCNT1H = 0x40; // 初值高8位
TCNT1L = 0x00; // 初值低8位
TIMSK1_Bit0 = 1; // TIMER1使能
D1_OFF;
D2_OFF;
D3_OFF;
D4_OFF;
D5_OFF;
D6_OFF;
TCCR1B = 0x01; // TIMER1开始计数,1分频
}
/*******************************************************************************
函数名:adc_init()
作用:adc初始化
输入:无
返回值:无
*******************************************************
单片机可控可调电 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)