大家好
我的功放进程贴开始了,我会记录我的每一步动向,谢谢大家的分享。
开始我的程序设计,一点一滴记录,欢迎大家指正。
/************* 功能说明 **************
本文件为STC15xxx系列的端口初始化程序,用户几乎可以不修改这个程序.
******************************************/
#include "GPIO.h"
//========================================================================
// 函数: u8 GPIO_Inilize(u8 GPIO, GPIO_InitTypeDef *GPIOx)
// 描述: 初始化IO口.
// 参数: GPIOx: 结构参数,请参考timer.h里的定义.
// 返回: 成功返回0, 空操作返回1,错误返回2.
// 版本: V1.0, 2012-10-22
//========================================================================
u8 GPIO_Inilize(u8 GPIO, GPIO_InitTypeDef *GPIOx)
{
if(GPIO > GPIO_P5) return 1; //空操作
if(GPIOx->Mode > GPIO_OUT_PP) return 2; //错误
if(GPIO == GPIO_P0)
{
if(GPIOx->Mode == GPIO_PullUp) P0M1 &= ~GPIOx->Pin, P0M0 &= ~GPIOx->Pin; //上拉准双向口
if(GPIOx->Mode == GPIO_HighZ) P0M1 |= GPIOx->Pin, P0M0 &= ~GPIOx->Pin; //浮空输入
if(GPIOx->Mode == GPIO_OUT_OD) P0M1 |= GPIOx->Pin, P0M0 |= GPIOx->Pin; //开漏输出
if(GPIOx->Mode == GPIO_OUT_PP) P0M1 &= ~GPIOx->Pin, P0M0 |= GPIOx->Pin; //推挽输出
}
if(GPIO == GPIO_P1)
{
if(GPIOx->Mode == GPIO_PullUp) P1M1 &= ~GPIOx->Pin, P1M0 &= ~GPIOx->Pin; //上拉准双向口
if(GPIOx->Mode == GPIO_HighZ) P1M1 |= GPIOx->Pin, P1M0 &= ~GPIOx->Pin; //浮空输入
if(GPIOx->Mode == GPIO_OUT_OD) P1M1 |= GPIOx->Pin, P1M0 |= GPIOx->Pin; //开漏输出
if(GPIOx->Mode == GPIO_OUT_PP) P1M1 &= ~GPIOx->Pin, P1M0 |= GPIOx->Pin; //推挽输出
}
if(GPIO == GPIO_P2)
{
if(GPIOx->Mode == GPIO_PullUp) P2M1 &= ~GPIOx->Pin, P2M0 &= ~GPIOx->Pin; //上拉准双向口
if(GPIOx->Mode == GPIO_HighZ) P2M1 |= GPIOx->Pin, P2M0 &= ~GPIOx->Pin; //浮空输入
if(GPIOx->Mode == GPIO_OUT_OD) P2M1 |= GPIOx->Pin, P2M0 |= GPIOx->Pin; //开漏输出
if(GPIOx->Mode == GPIO_OUT_PP) P2M1 &= ~GPIOx->Pin, P2M0 |= GPIOx->Pin; //推挽输出
}
if(GPIO == GPIO_P3)
{
if(GPIOx->Mode == GPIO_PullUp) P3M1 &= ~GPIOx->Pin, P3M0 &= ~GPIOx->Pin; //上拉准双向口
if(GPIOx->Mode == GPIO_HighZ) P3M1 |= GPIOx->Pin, P3M0 &= ~GPIOx->Pin; //浮空输入
if(GPIOx->Mode == GPIO_OUT_OD) P3M1 |= GPIOx->Pin, P3M0 |= GPIOx->Pin; //开漏输出
if(GPIOx->Mode == GPIO_OUT_PP) P3M1 &= ~GPIOx->Pin, P3M0 |= GPIOx->Pin; //推挽输出
}
if(GPIO == GPIO_P4)
{
if(GPIOx->Mode == GPIO_PullUp) P4M1 &= ~GPIOx->Pin, P4M0 &= ~GPIOx->Pin; //上拉准双向口
if(GPIOx->Mode == GPIO_HighZ) P4M1 |= GPIOx->Pin, P4M0 &= ~GPIOx->Pin; //浮空输入
if(GPIOx->Mode == GPIO_OUT_OD) P4M1 |= GPIOx->Pin, P4M0 |= GPIOx->Pin; //开漏输出
if(GPIOx->Mode == GPIO_OUT_PP) P4M1 &= ~GPIOx->Pin, P4M0 |= GPIOx->Pin; //推挽输出
}
if(GPIO == GPIO_P5)
{
if(GPIOx->Mode == GPIO_PullUp) P5M1 &= ~GPIOx->Pin, P5M0 &= ~GPIOx->Pin; //上拉准双向口
if(GPIOx->Mode == GPIO_HighZ) P5M1 |= GPIOx->Pin, P5M0 &= ~GPIOx->Pin; //浮空输入
if(GPIOx->Mode == GPIO_OUT_OD) P5M1 |= GPIOx->Pin, P5M0 |= GPIOx->Pin; //开漏输出
if(GPIOx->Mode == GPIO_OUT_PP) P5M1 &= ~GPIOx->Pin, P5M0 |= GPIOx->Pin; //推挽输出
}
return 0; //成功
时钟控制
/************* 功能说明 **************
本文件为STC15xxx系列的定时器初始化和中断程序,用户可以在这个文件中修改自己需要的中断程序.
******************************************/
#include "timer.h"
/********************* Timer0中断函数************************/
//void timer0_int (void) interrupt TIMER0_VECTOR
//{
//}
/********************* Timer1中断函数************************/
void timer1_int (void) interrupt TIMER1_VECTOR
{
}
/********************* Timer2中断函数************************/
void timer2_int (void) interrupt TIMER2_VECTOR
{
P10 = ~P10;
}
//========================================================================
// 函数: u8 Timer_Inilize(u8 TIM, TIM_InitTypeDef *TIMx)
// 描述: 定时器初始化程序.
// 参数: TIMx: 结构参数,请参考timer.h里的定义.
// 返回: 成功返回0, 空操作返回1,错误返回2.
// 版本: V1.0, 2012-10-22
//========================================================================
u8 Timer_Inilize(u8 TIM, TIM_InitTypeDef *TIMx)
{
if(TIM > Timer2) return 1; //空操作
if(TIM == Timer0)
{
TR0 = 0; //停止计数
if(TIMx->TIM_Interrupt == ENABLE) ET0 = 1; //允许中断
else ET0 = 0; //禁止中断
if(TIMx->TIM_Polity == PolityHigh) PT0 = 1; //高优先级中断
else PT0 = 0; //低优先级中断
if(TIMx->TIM_Mode > TIM_16BitAutoReloadNoMask) return 2; //错误
TMOD = (TMOD & ~0x03) | TIMx->TIM_Mode; //工作模式,0: 16位自动重装, 1: 16位定时/计数, 2: 8位自动重装, 3: 16位自动重装, 不可屏蔽中断
if(TIMx->TIM_ClkSource == TIM_CLOCK_12T) AUXR &= ~0x80; //12T
if(TIMx->TIM_ClkSource == TIM_CLOCK_1T) AUXR |= 0x80; //1T
if(TIMx->TIM_ClkSource == TIM_CLOCK_Ext) TMOD |= 0x04; //对外计数或分频
else TMOD &= ~0x04; //定时
if(TIMx->TIM_ClkOut == ENABLE) INT_CLKO |= 0x01; //输出时钟
else INT_CLKO &= ~0x01; //不输出时钟
TH0 = (u8)(TIMx->TIM_Value >> 8);
TL0 = (u8)TIMx->TIM_Value;
if(TIMx->TIM_Run == ENABLE) TR0 = 1; //开始运行
return 0; //成功
}
if(TIM == Timer1)
{
TR1 = 0; //停止计数
if(TIMx->TIM_Interrupt == ENABLE) ET1 = 1; //允许中断
else ET1 = 0; //禁止中断
if(TIMx->TIM_Polity == PolityHigh) PT1 = 1; //高优先级中断
else PT1 = 0; //低优先级中断
if(TIMx->TIM_Mode >= TIM_16BitAutoReloadNoMask) return 2; //错误
TMOD = (TMOD & ~0x30) | TIMx->TIM_Mode; //工作模式,0: 16位自动重装, 1: 16位定时/计数, 2: 8位自动重装
if(TIMx->TIM_ClkSource == TIM_CLOCK_12T) AUXR &= ~0x40; //12T
if(TIMx->TIM_ClkSource == TIM_CLOCK_1T) AUXR |= 0x40; //1T
if(TIMx->TIM_ClkSource == TIM_CLOCK_Ext) TMOD |= 0x40; //对外计数或分频
else TMOD &= ~0x40; //定时
if(TIMx->TIM_ClkOut == ENABLE) INT_CLKO |= 0x02; //输出时钟
else INT_CLKO &= ~0x02; //不输出时钟
TH1 = (u8)(TIMx->TIM_Value >> 8);
TL1 = (u8)TIMx->TIM_Value;
if(TIMx->TIM_Run == ENABLE) TR1 = 1; //开始运行
return 0; //成功
}
if(TIM == Timer2) //Timer2,固定为16位自动重装, 中断无优先级
{
AUXR &= ~(1<<4); //停止计数
if(TIMx->TIM_Interrupt == ENABLE) IE2 |= (1<<2); //允许中断
else IE2 &= ~(1<<2); //禁止中断
if(TIMx->TIM_ClkSource > TIM_CLOCK_Ext) return 2;
if(TIMx->TIM_ClkSource == TIM_CLOCK_12T) AUXR &= ~(1<<2); //12T
if(TIMx->TIM_ClkSource == TIM_CLOCK_1T) AUXR |= (1<<2); //1T
if(TIMx->TIM_ClkSource == TIM_CLOCK_Ext) AUXR |= (1<<3); //对外计数或分频
else AUXR &= ~(1<<3); //定时
if(TIMx->TIM_ClkOut == ENABLE) INT_CLKO |= 0x04; //输出时钟
else INT_CLKO &= ~0x04; //不输出时钟
TH2 = (u8)(TIMx->TIM_Value >> 8);
TL2 = (u8)TIMx->TIM_Value;
if(TIMx->TIM_Run == ENABLE) AUXR |= (1<<4); //开始运行
return 0; //成功
}
return 2; //错误
}
有奖活动 | |
---|---|
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
【有奖活动】智能可穿戴设备AR/VR如何引领科技新潮流! | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
【有奖活动】震撼来袭!这场直播将直击工程师的心灵! |
打赏帖 | |
---|---|
【换取手持数字示波器】+AT89C2051串口接收数据显示到LCD1602上被打赏50分 | |
【分享评测,赢取加热台】+AT89C2051控制NRF24L01收发数据被打赏50分 | |
【分享评测,赢取加热台】迪文屏设计实战技巧被打赏40分 | |
“DFRobot盖革计数器模块评测”基础模型搭建被打赏50分 | |
【换取手持数字示波器】+角点检测----Harris被打赏40分 | |
【换取手持数字示波器】常见音频指标被打赏20分 | |
【分享评测,赢取加热台】从零配置MCX-N947——PWM(SCtimer)被打赏50分 | |
【分享评测,赢取加热台】实际测试MCX-N947——PWM(Ctimer)被打赏50分 | |
【换取手持数字示波器】红外触摸框及各类红外设备的工作原理被打赏20分 | |
【换取手持数字示波器】+精英板驱动两相四线步进电机被打赏10分 |