# 成功读取电压并显示

This commit is contained in:
jxh
2025-03-18 22:49:46 +08:00
parent 65614ace50
commit 7bcd4c1c17
17 changed files with 1120 additions and 863 deletions

View File

@ -8,20 +8,19 @@
#include "delay.h"
// #define FOSC 30000000UL // 定义系统频率
// sbit SDA = P2^7;
// sbit SCL = P2^6;
void IIC_Init(void);
void IIC_Start(void);
void IIC_Stop(void);
void IIC_SendByte(u8 dat);
u8 IIC_RecvByte(void);
bit IIC_WaitAck(void);
void IIC_SendAck(bit ack);
bit IIC_WriteBytes(u8 devAddr, u8 regAddr, u8 *pData, u8 len);
bit IIC_ReadBytes(u8 devAddr, u8 regAddr, u8 *pData, u8 len);
void IIC_Init (void);
void IIC_Start (void);
void IIC_Stop (void);
void IIC_SendByte (u8 dat);
u8 IIC_RecvByte (void);
bit IIC_WaitAck (void);
void IIC_SendAck (bit ack);
bit IIC_WriteBytes (u8 devAddr, u8 regAddr, u8 *pData, u8 len);
bit IIC_ReadBytes (u8 devAddr, u8 regAddr, u8 *pData, u8 len);
#endif

View File

@ -1,45 +1,56 @@
#include "timer4.h"
u8 Timer4_OF = 0; // 定时器4溢出标志
u8 Timer4_OF = 0; // 定时器4溢出标志
// 定时器4初始化16位自动重载模式
void Timer4_Init(void) {
Timer4_Stop(); // 停止定时器4
T4T3M &= 0x0F; // 清除T4控制位
T4T3M |= 0x20; // 设置T4为1T模式
T4L = 0xD0; // 设置定时初始值
T4H = 0x8A; // 设置定时初始值 1ms@30MHz 1T
IE2 |= 0x40; // 使能定时器4中断
void
Timer4_Init (void)
{
Timer4_Stop (); // 停止定时器4
T4T3M &= 0x0F; // 清除T4控制位
T4T3M |= 0x20; // 设置T4为1T模式
T4L = 0xD0; // 设置定时初始值
T4H = 0x8A; // 设置定时初始值 1ms@30MHz 1T
IE2 |= 0x40; // 使能定时器4中断
}
// 微秒级延时误差±0.3us
void Timer4_DelayUs(u16 us) {
u32 cycles = us * (FOSC / 1000000); // 计算所需时钟周期数
u16 reload = 65536 - (cycles / 1); // 1T模式下无需分频
T4H = reload >> 8; // 设置重载值高字节
T4L = reload & 0xFF;// 低字节
T4T3M |= 0x80; // 启动定时器4
void
Timer4_DelayUs (u16 us)
{
u32 cycles = us * (FOSC / 1000000); // 计算所需时钟周期数
u16 reload = 65536 - (cycles / 1); // 1T模式下无需分频
while ( Timer4_OF != True ); // 等待TF4溢出标志置位
Timer4_OF = False; // 清除溢出标志
T4H = reload >> 8; // 设置重载值高字节
T4L = reload & 0xFF; // 低字节
T4T3M |= 0x80; // 启动定时器4
while (Timer4_OF != True)
; // 等待TF4溢出标志置位
Timer4_OF = False; // 清除溢出标志
}
// 毫秒级延时(基于微秒级扩展)
void Timer4_DelayMs(u16 ms) {
while(ms--) {
Timer4_DelayUs(1000);
void
Timer4_DelayMs (u16 ms)
{
while (ms--)
{
Timer4_DelayUs (1000);
}
}
// 停止定时器4
void Timer4_Stop(void) {
T4T3M &= ~0x80; // 停止定时器4
void
Timer4_Stop (void)
{
T4T3M &= ~0x80; // 停止定时器4
}
// 定时器4中断服务程序
void Timer4_Isr(void) interrupt 20
void
Timer4_Isr (void) interrupt 20
{
Timer4_OF = True;
Timer4_Stop();
Timer4_OF = True;
Timer4_Stop ();
}

View File

@ -6,9 +6,9 @@
// #define FOSC 30000000UL // 系统时钟30MHz
void Timer4_Init(void);
void Timer4_DelayUs(u16 us);
void Timer4_DelayMs(u16 ms);
void Timer4_Stop(void);
void Timer4_Init (void);
void Timer4_DelayUs (u16 us);
void Timer4_DelayMs (u16 ms);
void Timer4_Stop (void);
#endif

View File

@ -1,25 +1,31 @@
#include "uart.h"
#include <STC15.H>
void Uart1_Init(void) //115200bps@30.000MHz
void
Uart1_Init (void) // 115200bps@30.000MHz
{
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x01; //串口1选择定时器2为波特率发生器
AUXR |= 0x04; //定时器时钟1T模式
T2L = 0xBF; //设置定时初始值
T2H = 0xFF; //设置定时初始值
AUXR |= 0x10; //定时器2开始计时
ES = 1; //使能串口1中断
SCON = 0x50; // 8位数据,可变波特率
AUXR |= 0x01; // 串口1选择定时器2为波特率发生器
AUXR |= 0x04; // 定时器时钟1T模式
T2L = 0xBF; // 设置定时初始值
T2H = 0xFF; // 设置定时初始值
AUXR |= 0x10; // 定时器2开始计时
ES = 1; // 使能串口1中断
}
// 重定向putchar函数
char putchar(char c) {
UART_SendByte(c);
return c;
char
putchar (char c)
{
UART_SendByte (c);
return c;
}
void UART_SendByte(unsigned char dat) {
SBUF = dat;
while(!TI); // 等待发送完成
TI = 0; // 清除发送中断标志
void
UART_SendByte (unsigned char dat)
{
SBUF = dat;
while (!TI)
; // 等待发送完成
TI = 0; // 清除发送中断标志
}

View File

@ -3,7 +3,7 @@
#include "config.h"
void Uart1_Init(void);
void UART_SendByte(unsigned char dat);
void Uart1_Init (void);
void UART_SendByte (unsigned char dat);
#endif