OC 结构体

void test() {
    // 这个机构只能在函数内部使用
    // 定义一个名为Student的结构体类型
    struct Student {
        int age; // 年龄
        char *name; // 姓名
        float height; // 身高
    };
    
    // 定义一个结构体变量
    struct Student stu = {27, "mj", 1.8f};
    // 下面这行的初始化是错误的
    // stu = {27, "mj", 18.0f};
    
    stu.age = 28;
    
    printf("age=%d\n", stu.age);
    printf("name=%s\n", stu.name);
    printf("height=%.1f\n", stu.height);
}

void test1() {
    struct Student {
        int age; // 年龄
        char *name; // 姓名
        float height; // 身高
    } stu = {27, "mj", 1.8f};
    
    struct Student stu1 = {28, "lmj", 1.9f};
    
    
    struct {
        int age; // 年龄
        char *name; // 姓名
        float height; // 身高
    } stu2 = {27, "mj", 1.8f};
    
    struct {
        int age; // 年龄
        char *name; // 姓名
        float height; // 身高
    } stu3 = {27, "mj", 1.8f};
}

void test2() {
    // 定义一个Date结构体
    struct Date {
        int year;
        int month;
        int day;
    };
    
    // 定义一个学生结构体
    struct Student {
        int age;
        struct Date birthday;
    };
    
    struct Student stu = {27, {2009, 10, 10}};
    
    printf("age=%d\n", stu.age);
    printf("year=%d\n", stu.birthday.year);
    printf("month=%d\n", stu.birthday.month);
    printf("day=%d\n", stu.birthday.day);
}

void test3() {
//    struct Student {
//        int age; // 年龄
//        char *name; // 姓名
//        float height; // 身高
//    };
//    struct Student a[2] = {{27, "mj", 1.8f}, {28, "lmj", 1.9f}};
    
    struct Student {
        int age; // 年龄
        char *name; // 姓名
        float height; // 身高
    } a[2] = {{27, "mj", 1.8f}, {28, "lmj", 1.9f}};
    
    struct Student a2[4];
}

struct Person {
    int age;
};

void change(struct Person p) {
    p.age = 9;
}
// 结构体作为函数参数
void test4() {
    struct Person person = {27};
    change(person);
    
    printf("age=%d", person.age);
}

// 指向结构体的指针
void tets5() {
    // 定义一个结构体变量
    struct Person person = {27};
    // 定义一个指向结构体的指针
    struct Person *p;
    // 让指针p指向结构体person
    p = &person;
    
    printf("age=%d\n", person.age);
    printf("age=%d\n", (*p).age);
    printf("age=%d\n", p->age);
}

int main(int argc, const char * argv[])
{
    tets5();
    return 0;
}

 

转载于:https://www.cnblogs.com/liuwj/p/6899611.html

#include "stm32f10x.h"// Device header #include "PWM.h" #include "IC.h" #include "OLED.h" int main(void) { PWM_Init(); IC_Init(); OLED_Init(); OLED_ShowString(1,1,"Freq:"); while(1) { OLED_ShowNum(1,6,IC_GetFreq(),5); } } #include "stm32f10x.h" // Device header void PWM_Init(void) //输出一个频率1KHz的PWM波 { TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; GPIO_InitTypeDef GPIO_InitStructure; TIM_OCInitTypeDef TIM_OCInitStructure; TIM_OCStructInit(&TIM_OCInitStructure); //给OC结构体赋初值 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); TIM_InternalClockConfig(TIM2); //内部时钟 TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1; //时基单元 TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; TIM_TimeBaseInitStructure.TIM_Period=100-1; //ARR设为100,即CCR值为占空比 TIM_TimeBaseInitStructure.TIM_Prescaler=720-1; //先初始化PSC的值 TIM_TimeBaseInitStructure.TIM_RepetitionCounter=0; TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure); TIM_Cmd(TIM2,ENABLE); //计数器使能 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP; //GPIO口,推挽复用输出 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOA,&GPIO_InitStructure); TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1; //输出比较模式PWM1 TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High; //高极性,极性不反转 TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable; //输出状态(使能) TIM_OCInitStructure.TIM_Pulse=0; //CCR的值,占空比=CRR/(ARR+1) TIM_OC1Init(TIM2,&TIM_OCInitStructure); //通道初始化 } void PWM_SetCompare1(uint16_t Compare) //更改占空比 { TIM_SetCompare1(TIM2,Compare); //单独更改CCR寄存器值,所以上面“Pulse”参数给0,且CCR值为占空比 } #include "stm32f10x.h" // Device header void IC_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; TIM_ICInitTypeDef TIM_ICInitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU; //带上拉模式 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOA,&GPIO_InitStructure); TIM_InternalClockConfig(TIM3); //内部时钟 TIM_Cmd(TIM3,ENABLE); //定时器使能 TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1; TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; TIM_TimeBaseInitStructure.TIM_Period=65536-1; //输入捕获中一般设置最大(防溢出) TIM_TimeBaseInitStructure.TIM_Prescaler=72-1; TIM_TimeBaseInitStructure.TIM_RepetitionCounter=0; TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure); TIM_ICInitStructure.TIM_Channel=TIM_Channel_1; //选择通道 TIM_ICInitStructure.TIM_ICFilter=0xF; //滤波器 TIM_ICInitStructure.TIM_ICPolarity=TIM_ICPolarity_Rising; //极性(上升沿) TIM_ICInitStructure.TIM_ICPrescaler=TIM_ICPSC_DIV1; //1分频 TIM_ICInitStructure.TIM_ICSelection=TIM_ICSelection_DirectTI; //数据选择器(直连/交叉) TIM_ICInit(TIM3,&TIM_ICInitStructure); TIM_SelectInputTrigger(TIM3,TIM_TS_TI1FP1); //触发源选择 TIM_SelectSlaveMode(TIM3,TIM_SlaveMode_Reset); //从模式选择 } uint32_t IC_GetFreq(void) { return 1000000/(TIM_GetCapture1(TIM3)); //fx=fc/N( 预分频后的值【1MHZ】 / CCR) } 为什么OLED不能显示1KHZ
最新发布
07-19
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值