打印

放弃

[复制链接]
71|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
34af9uc|  楼主 | 2024-5-20 21:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
LED, pi, gp, IO, GPIO
暂时放弃了,整不了,怎么编译就是不
/*************HLK-W801-KIT-V1.1********************/
/*************1.3寸OLED IIC************************/
/*************ID:共同学习stm8**********************/
/*************跨平台,一切都是运算*******************/
/*******.******20240421*****************************/

//0X0000 GPIO 数据寄存器 GPIO_DATA RW 读写 GPIO 当前数据 0X180B
#define                GPIOA_DATA                        (*(volatile unsigned int*)(0x40011200+0x0000))
//0X0004 GPIO 数据使能寄存器 GPIO_DATA_EN RW 配置 GPIO_DATA 的使能位 0XFFFF
#define                GPIOA_DATA_EN                (*(volatile unsigned int*)(0x40011200+0X0004))
//0X0008 GPIO 方向控制寄存器 GPIO_DIR RW 配置 GPIO 方向 0X0000
#define                GPIOA_DIR                        (*(volatile unsigned int*)(0x40011200+0X0008))
//0X000C GPIO 上拉控制寄存器 GPIO_PULL_EN RW 配置 GPIO 上拉 0XFFFF
#define                GPIOA_PULL_EN                        (*(volatile unsigned int*)(0x40011200+0X000c))
//0X001C GPIO 下拉控制寄存器 GPIO_DN_ENA RW 配置 GPIO 下拉 0X0000
#define                GPIOA_DN_ENA                        (*(volatile unsigned int*)(0x40011200+0X001c))


//0X0000 GPIO 数据寄存器 GPIO_DATA RW 读写 GPIO 当前数据 0X180B
#define                GPIOB_DATA                        (*(volatile unsigned int*)(0x40011400+0x0000))
//0X0004 GPIO 数据使能寄存器 GPIO_DATA_EN RW 配置 GPIO_DATA 的使能位 0XFFFF
#define                GPIOB_DATA_EN                (*(volatile unsigned int*)(0x40011400+0X0004))
//0X0008 GPIO 方向控制寄存器 GPIO_DIR RW 配置 GPIO 方向 0X0000
#define                GPIOB_DIR                        (*(volatile unsigned int*)(0x40011400+0X0008))
//0X000C GPIO 上拉控制寄存器 GPIO_PULL_EN RW 配置 GPIO 上拉 0XFFFF
#define                GPIOB_PULL_EN                        (*(volatile unsigned int*)(0x40011400+0X000c))
//0X001C GPIO 下拉控制寄存器 GPIO_DN_ENA RW 配置 GPIO 下拉 0X0000
#define                GPIOB_DN_ENA                        (*(volatile unsigned int*)(0x40011400+0X001c))


/**************************************************/
//                         _______________________
//                        |        1.3' OLED IIC                |
//                        |        GND|VCC|SCL|SDA                |
//                        |                128*64                        |
//                        |_______________________|
//数据sda-----PA1
//时钟scl-----PA2
//sda¯¯\__X=7=X===X===X===X===X===X===X=0=X¯\_/X__/¯¯
//scl¯¯¯¯\_/¯\_/¯\_/¯\_/¯\_/¯\_/¯\_/¯\_/¯\_/¯¯\_/¯¯¯¯
//_____s____1___2___3___4___5___6___7___8__ack____p__
/**************************************************/
void                iic_chushihua();                //iic初始化;
void                iic_qishi();                        //iic起始信号;
void                iic_yingda();                        //iic应答信号;
void                iic_tingzhi();                        //iic停止信号;
void                iic_xie_byte(unsigned char iic_i1);                //iic写一个字节;
void                yanshi_1ms();                        //延时1ms;
void                yanshi_1s();                        //延时1秒;
void                yanshi(unsigned char y1);                //延时
/**************************************************/

//#include <stdio.h>
//#include "wm_hal.h"
int main(void)
{


GPIOA_DATA_EN                        |=(1<<3);
GPIOA_DIR                                |=1<<3;
#define                led_l                GPIOA_DATA        &=~(1<<3)
#define                led_h                GPIOA_DATA        |=(1<<3)

GPIOB_DATA_EN                        |=(1<<5);
GPIOB_DIR                                |=(1<<5);
#define                led_1_l                GPIOB_DATA        &=~(1<<5)
#define                led_1_h                GPIOB_DATA        |=(1<<5)

GPIOB_DATA_EN                        |=(1<<25);
GPIOB_DIR                                |=(1<<25);
#define                led_2_l                GPIOB_DATA        &=~(1<<25)
#define                led_2_h                GPIOB_DATA        |=(1<<25)
/**************************************************/
led_1_h;
led_2_h;

//while(1){};
iic_chushihua();                //iic初始化;
iic_qishi();
iic_xie_byte(0x78);
void                iic_yingda();
iic_tingzhi();
led_1_l;
//led_2_h;
while (1)

{
led_l;
led_1_l;
led_2_l;
yanshi_1s();
//yanshi(10);
led_h;
led_1_h;
led_2_h;
yanshi_1s();
//yanshi(10);
}
return 0;


}


/**************************************************/
void                yanshi_1ms()        //延时1ms;
{
volatile unsigned int                x1=7500;       
        //while(x1 --){ __NOP(); __NOP(); __NOP(); __NOP(); __NOP();}
while(x1 --){};
}

/**************************************************/
void                yanshi_1s()        //延时1秒;
{
volatile unsigned char                z1,z2,z3;
z1                =100;                //循环次数;
do
{
        do
        {
        z2                =100;
        do{z3 =100;} while(z3--);                //细调;
        }
        while(z2--);                //粗调;
       
}
while(z1--);

}
/**************************************************/
void                yanshi(unsigned char y1)                //延时
{
while(y1--)
        {/*
        __NOP(); __NOP(); __NOP(); __NOP(); __NOP();__NOP(); __NOP(); __NOP(); __NOP(); __NOP();
        __NOP(); __NOP(); __NOP(); __NOP(); __NOP();__NOP(); __NOP(); __NOP(); __NOP(); __NOP();
        __NOP(); __NOP(); __NOP(); __NOP(); __NOP();__NOP(); __NOP(); __NOP(); __NOP(); __NOP();
        __NOP(); __NOP(); __NOP(); __NOP(); __NOP();__NOP(); __NOP(); __NOP(); __NOP(); __NOP();
        __NOP(); __NOP(); __NOP(); __NOP(); __NOP();__NOP(); __NOP(); __NOP(); __NOP(); __NOP();
         */
         ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        }
}
/**************************************************/
void                iic_chushihua()                //iic初始化;
{
//数据sda-----PA1
//时钟scl-----PA2

//#define                xian_sda_l                GPIOA_DIR        |=(1<<1);        __NOP(); __NOP();        GPIOA_DATA        &=~(1<<1)        /*sda输出,低;*/
//#define                xian_sda_h                GPIOA_DIR        |=(1<<1);        __NOP(); __NOP();        GPIOA_DATA        |=(1<<1)        /*sda输出,高;*/
//#define                xian_sda_shuru        GPIOA_DIR        &=~(1<<1);        __NOP(); __NOP();                                                        /*sda输入,高;*/
//#define                xian_sda_shuju        GPIOA_DATA        &=(1<<1)                                                                                                /*sda,io状态;*/


//#define                xian_scl_l                GPIOA_DIR        |=(1<<2);        __NOP(); __NOP();        GPIOA_DATA        &=~(1<<2)        /*scl输出,低;*/
//#define                xian_scl_h                GPIOA_DIR        |=(1<<2);        __NOP(); __NOP();        GPIOA_DATA        |=(1<<2)        /*scl输出,高;*/
//#define                xian_scl_shuru        GPIOA_DIR        &=~(1<<2);        __NOP(); __NOP();                                                        /*输入,高;*/
//#define                xian_scl_shuju        GPIOA_DATA        &=(1<<2)                                                                                                /*scl,io状态;*/


//#define                sda_l                GPIOA_DIR        |=(1<<1);        __NOP(); __NOP();        GPIOA_DATA        &=~(1<<1)                /*sda输出,低;*/
//#define                sda_h                GPIOA_DIR        &=~(1<<1);        __NOP(); __NOP()                                                                /*sda输入,高;*/
//#define                sda_data        GPIOA_DATA        &(1<<1)


//#define                scl_l                GPIOA_DIR        |=(1<<2);        __NOP(); __NOP();        GPIOA_DATA        &=~(1<<2)                /*scl输出,低;*/
//#define                scl_h                GPIOA_DIR        &=~(1<<2);        __NOP(); __NOP();                                                                /*输入,高;*/
//#define                scl_data        GPIOA_DATA        &(1<<2)


#define                sda_l                GPIOA_DIR        |=(1<<1);                GPIOA_DATA        &=~(1<<1)                /*sda输出,低;*/
#define                sda_h                GPIOA_DIR        &=~(1<<1);                                                                        /*sda输入,高;*/
#define                sda_data        GPIOA_DATA        &(1<<1)


#define                scl_l                GPIOA_DIR        |=(1<<2);                GPIOA_DATA        &=~(1<<2)                /*scl输出,低;*/
#define                scl_h                GPIOA_DIR        &=~(1<<2);                                                                        /*输入,高;*/
#define                scl_data        GPIOA_DATA        &(1<<2)
/**************************************************/

GPIOA_DATA_EN                |=1<<1;                        //sda数据使能;
GPIOA_DATA_EN                |=1<<2;                        //scl时钟使能;
GPIOA_PULL_EN                |=1<<1;                        //sda数据上拉电阻;
GPIOA_PULL_EN                |=1<<2;                        //scl时钟上拉电阻;
yanshi(100);
}




void                iic_qishi()                //iic起始信号;
{
//sda¯¯\__
//scl¯¯¯¯¯
sda_h;
scl_h
yanshi(10);
sda_l;
yanshi(10);
}
void                iic_xie_byte(unsigned char iic_i1)                //iic写一个字节;
{
//sda¯¯\__X=7=X===X===X===X===X===X===X=0=/¯\_/X__/¯¯
//scl¯¯¯¯\_/¯\_/¯\_/¯\_/¯\_/¯\_/¯\_/¯\_/¯\_/¯¯\_/¯¯¯¯
//_____s____1___2___3___4___5___6___7___8__ack____p__
scl_l;        yanshi(10);        if(iic_i1 &(1<<7)){sda_h;} else{sda_l;}        yanshi(10);scl_h;        yanshi(10);
scl_l;        yanshi(10);        if(iic_i1 &(1<<6)){sda_h;} else{sda_l;}        yanshi(10);scl_h;        yanshi(10);
scl_l;        yanshi(10);        if(iic_i1 &(1<<5)){sda_h;} else{sda_l;}        yanshi(10);scl_h;        yanshi(10);
scl_l;        yanshi(10);        if(iic_i1 &(1<<4)){sda_h;} else{sda_l;}        yanshi(10);scl_h;        yanshi(10);
scl_l;        yanshi(10);        if(iic_i1 &(1<<3)){sda_h;} else{sda_l;}        yanshi(10);scl_h;        yanshi(10);
scl_l;        yanshi(10);        if(iic_i1 &(1<<2)){sda_h;} else{sda_l;}        yanshi(10);scl_h;        yanshi(10);
scl_l;        yanshi(10);        if(iic_i1 &(1<<1)){sda_h;} else{sda_l;}        yanshi(10);scl_h;        yanshi(10);
scl_l;        yanshi(10);        if(iic_i1 &(1<<0)){sda_h;} else{sda_l;}        yanshi(10);scl_h;        yanshi(10);

}
void                iic_yingda()                //iic应答信号;
{
//sda/¯\____/
//scl_/¯¯¯¯\_
scl_l;
yanshi(10);
sda_h;
yanshi(10);
scl_h;
yanshi(10);
if(~(sda_data))
        {
        led_1_h;
        //while(1);  //卡死
        }
scl_l;
yanshi(10);

}
/**************************************************/
void                iic_tingzhi()                //iic停止信号;
{
//sdaX\__/¯
//scl\_/¯¯¯
scl_l;
yanshi(10);
sda_l;
yanshi(10);
scl_h;
yanshi(10);
sda_h;
yanshi(10);
}
/**************************************************/
/**************************************************/
/**************************************************/

按想的走,让灯亮就是不亮,想让他卡在那就是不动,也不知道进没进函数

使用特权

评论回复

相关帖子

发新帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

287

主题

444

帖子

57

粉丝