初级会员

- 积分
- 65
- 金钱
- 65
- 注册时间
- 2019-7-18
- 在线时间
- 21 小时
|
8金钱
#include"st7032i.h"
#include "string.h"
#include "stm32f10x_gpio.h"
#include "delay.h"
void St7032i_Port(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(I2C_SCL_PORT_RCC|I2C_SDA_PORT_RCC|I2C_rest_PORT_RCC , ENABLE);
GPIO_InitStructure.GPIO_Pin =I2C_SCL_PIN; //????????? IO
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(I2C_SCL_PORT, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin =I2C_SDA_PIN;
GPIO_Init(I2C_SDA_PORT, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin =I2C_rest_PIN;
GPIO_Init(I2C_rest_PORT, &GPIO_InitStructure);
I2C_SCL=1;
I2C_SDA=1;
I2C_rest=1;
}
void SDA_in(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin =I2C_SDA_PIN; //????????? IO
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(I2C_SDA_PORT, &GPIO_InitStructure);
}
void iicstart(void)//起始型信号
{
SDA_OUT();
I2C_SDA=1;
I2C_SCL=1;
// nop;
// nop;
// nop;
delay_us(5);
I2C_SDA=0;
// nop;
// nop;
// nop;
delay_us(6);
I2C_SCL=0;
}
void iicstop(void)//停止信号
{
SDA_OUT();
I2C_SCL=0;
I2C_SDA=0;
I2C_SCL=1;
delay_us(6);
I2C_SDA=1;
delay_us(6);
}
/*void fillone2(uint i)
{
uint a;
iicstop();
iicstart();
wrdata(0x7c); //write device address and write mode
wrdata(0x40); //set write data mode
for(a=0;a<16;a++)
wrdata(i);
iicstop();
}
void displayicon()
{
iicstart();
wrdata(0x7c); // 78
wrdata(0x39);// FUNCTION SEt
wrdata(0x40);
fillone2(0xff);
delay1(20);
// while(getkey()==0);
fillone2(0x15);
delay1(20);
// while(getkey()==0);
fillone2(0x0a);
delay1(20);
// while(getkey()==0);
fillone2(0x19);
delay1(20);
// while(getkey()==0);
iicstop();
iicstart();
wrdata(0x7c); // 78
wrdata(0x00);
wrdata(0x39);// FUNCTION SEt
wrdata(0x78);//Contrast set
wrdata(0x80);
iicstop();
}*/
void wrdata(uint8_t lcddata)
{
uint8_t i;
SDA_OUT();
//csb=0;
I2C_SCL;
for(i=0;i<8;i++)
{
//nop;
if((lcddata<<i)&0x80)
I2C_SDA=1;
else
I2C_SDA=0;
//nop;
delay_us(2);
I2C_SCL=1;
//nop;nop;nop;
delay_us(5);
I2C_SCL=0;
}
I2C_SDA=1;
//nop;nop;nop;
delay_us(5);
I2C_SCL=1;
//nop;
delay_us(2);
I2C_SCL=0;
//csb=1;
}
void fillone(uint8_t i,uint8_t j)
{
uint8_t a;
//iicstop();
iicstart();
wrdata(0x7c); //write device address and write mode
wrdata(0x40); //set write data mode
for(a=0;a<40;a++)
{
wrdata(i);
i++;
}
for(a=0;a<40;a++)
{
wrdata(j);
j++;
}
iicstop();
}
void intional_st7032i(void)
{
//St7032i_Port();
I2C_rest =0;
delay_us(20);
I2C_rest =1;
delay_us(20);
iicstart();
wrdata(0x7c); // 78
wrdata(0x00);
wrdata(0x39); //FUNCTION SEt
wrdata(0x14); //Bias selection/internal OSC frequency adjust
wrdata(0x5f); //power/ICON control/contrast set C5,C4:1,1
wrdata(0x6b); //Follower control Rab2,Rab1,Rab0:0,1,1 1+Rb/Ra=1.8 V0=(1+Rb/Ra)*[VDD*(a+36)/100]
wrdata(0x73); //set vo reference voltage C3,C2,C1,C0:0,0,1,1 a=51
wrdata(0x0c); //DISPLAY ON/OF CONTROL //wrdata(0x01);//clear display
wrdata(0x80);
iicstop();
}
/*************上面是.C部分
/*****************下面为.H部分
#ifndef __st7032i_H
#define __st7032i_H
#include "stm32f10x.h"
#include "sys.h"
#define I2C_SDA_PORT GPIOA //???????
#define I2C_SDA_PIN (GPIO_Pin_13) //?????PIN??
#define I2C_SDA_PORT_RCC RCC_APB2Periph_GPIOA //??????
#define I2C_SCL_PORT GPIOA //???????
#define I2C_SCL_PIN (GPIO_Pin_14) //?????PIN??
#define I2C_SCL_PORT_RCC RCC_APB2Periph_GPIOA //??????
#define I2C_rest_PORT GPIOA //???????
#define I2C_rest_PIN (GPIO_Pin_15) //?????PIN??
#define I2C_rest_PORT_RCC RCC_APB2Periph_GPIOA //??????
#define I2C_SDA PAout(13)
#define I2C_SCL PAout(14)
#define I2C_rest PAout(15)
\
void iicstop(void);
void displayicon(void);
void iicstart(void);
void fillone(uint8_t i,uint8_t j);
void fillone2(uint16_t i);
void wrdata(uint8_t lcddata);
void intional_st7032i(void);
void St7032i_Port(void);
#endif
/**********************/下面主函数部分
#include "stm32f10x.h"
#include"st7032i.h"
#include "delay.h"
//************************************************/
int main(void)
{
St7032i_Port();
intional_st7032i();
while(1)
{
fillone(0x08,0x30);
delay_ms(20);
fillone(0x41,0x51);
delay_ms(20);
fillone(0x61,0x71);
delay_ms(20);
fillone(0xc0,0xf0);
delay_ms(20);
}
}
这部分函数是51移植过来的,51单片机用这个程序可以点亮,但是用STM32单片机不亮,我不知道哪里有问题,求大神指点。
|
|