📄 fun.h
字号:
#include "intrins.h"
#include <reg52.h> //包含头文件
//定义端口寄存器
sfr P0M0 = 0X93;
sfr P0M1 = 0X94;
sfr P1M0 = 0X91;
sfr P1M1 = 0X92;
sfr P2M0 = 0X95;
sfr P2M1 = 0X96;
sfr P3M0 = 0Xb1;
sfr P3M1 = 0Xb2;
//定义ADC寄存器
sfr P1ASF = 0X9D;
sfr ADC_CONTR = 0XBC;
sfr ADC_RES = 0XBD;
sfr ADC_RESL = 0XBE;
//与PCA0有关的寄存器
sfr CCON = 0xd8; //PCA控制寄存器
sbit CCF0 = CCON^0; //PCA0中断标志位
sbit CR = CCON^6; //运行控制位
sbit CF = CCON^7; //溢出标志
sfr CMOD = 0xd9; //PCA工作模式寄存器
sfr CL = 0xe9;
sfr CH = 0xf9;
sfr CCAPM0 = 0xda;//PCA0寄存器
sfr CCAP0L = 0xea;
sfr CCAP0H = 0xfa;
sfr PCAPWM0 = 0xf2;
sfr AUXR= 0x8e;
sfr AUXR1 = 0xa2;
#define fosc 11059200L
#define T0_50ms (65536 - (fosc/12/50000)) //50ms定时参数
unsigned char cntint0; //进入t0的计数值
unsigned int ad_result10; //10位ad转换结果
float vin;
unsigned char duty[4] = {0,20,50,80};
unsigned char duty_level;
void init_port()
{
P1M1 = 0x08; //P1.3为输出
P1M0 = 0x08;
}
void init_timer0()
{
AUXR &=0x7F; //T0x12 = 0,定时器0使用12分频
TMOD |= 0X01;
TH0 = T0_50ms >> 8;
TL0 = T0_50ms,
ET0 = 1; //允许T0中断
}
void init_adc()
{
P1ASF = 0x01; //P1.0用作AD转换
ADC_RES = 0;
ADC_RESL = 0;
//ADC_POWER=1,SPEED1=0,SPEED0=0,ADC_FLAG=0,ADC_START=0,CHS2/CHS1/CHS0=000
ADC_CONTR = 0X80;
//等待4周期
_nop_();
_nop_();
_nop_();
_nop_();
//ADRJ = 0,ADC_RES寄存器保存10位A/D转换结果的高8位,ADC_RESL保存结果的低2位
AUXR1 &= 0xfb;
}
void init_pca()
{
CCON = 0;
CL = 0;
CH = 0;
CMOD = 0x08; //时钟源为系统时钟,得到PWM的频率 = fosc / 256 = 43.2k
duty_level = 0; //占空比0%
CCAP0H = 255 - 255 * duty[duty_level] / 100;
CCAP0L = CCAP0H;
CCAPM0 = 0x42; //上升沿捕获,PWM使能
CR = 1; // 启动PWM
}
//定义延时函数
void ms_delay(unsigned int t)
{
unsigned int i;
for (t; t > 0; t--) //外层循环t次
for (i = 110;i > 0; i--) //内层循环110次
;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -