高级会员

- 积分
- 646
- 金钱
- 646
- 注册时间
- 2014-3-5
- 在线时间
- 67 小时
|
5金钱
main.c
#include <stm32f10x_lib.h>
#include "sys.h"
#include "tft1.h"
// 硬件连接:
// lcd_bl -> PC10
// lcd_cs -> PC9
// lcd_rs -> PC8
// lcd_wr -> PC7
// lcd_rd -> PC6
// lcd_data -> PB0-15
void lcd_init(void)
{
RCC->APB2ENR|=1<<3; //使能GPIOB时钟
RCC->APB2ENR|=1<<4; //使能GPIOC时钟
RCC->APB2ENR|=1<<0; //使能辅助时钟
JTAG_Set(SWD_ENABLE); //使能SWD,关闭JTAG
GPIOC->CRH&=0XFFFFF000; //PORTC6~10 推挽输出
GPIOC->CRH|=0X00000333;
GPIOC->CRL&=0X00FFFFFF;
GPIOC->CRL|=0X33000000;
GPIOC->ODR|=0X07C0;
GPIOB->CRH=0X33333333; //PORTB 推挽输出
GPIOB->CRL=0X33333333;
GPIOB->ODR=0XFFFF;
}
//说明:数据是16位的,寄存器是八位
void lcd_write_reg(u8 data)
{
lcd_rs=0; //写地址
lcd_cs=0; //使能tft
lcd_data(data);
lcd_wr=0; //拉低写数据
lcd_wr=1; //上升沿把数据送到TFT
lcd_cs=1; //关闭TFT
}
void lcd_write_data(u16 data)
{
lcd_rs=1; //写数据
lcd_cs=0; //使能tft
lcd_data(data);
lcd_wr=0; //拉低写数据
lcd_wr=1; //上升沿把数据送到TFT
lcd_cs=1; //关闭TFT
}
void lcd_writereg (u8 lcd_reg,u16 reg_Value) //写寄存器地址和写寄存器值
{
lcd_write_reg(lcd_reg);
lcd_write_data(reg_Value);
}
u16 lcd_readdata(void)
{
u16 read_data;
GPIOB->CRL=0X88888888; //PB0-7 上拉输入
GPIOB->CRH=0X88888888; //PB8-15 上拉输入
GPIOB->ODR=0XFFFF; //全部输出高
lcd_rs=1;
lcd_cs=0;
//读取数据(读寄存器时,并不需要读2次)
lcd_rd=0;
lcd_rd=1;
read_data=lcd_data_in;
lcd_cs=1;
GPIOB->CRL=0X33333333; //PB0-7 上拉输出
GPIOB->CRH=0X33333333; //PB8-15 上拉输出
GPIOB->ODR=0XFFFF; //全部输出高
return read_data;
}
u16 lcd_readreg(u8 lcd_reg)
{
u16 readdata;
lcd_write_reg(lcd_reg);
readdata=lcd_readdata();
return readdata;
}
tft.c
#include <stm32f10x_lib.h>
#include "sys.h"
#include "tft1.h"
// 硬件连接:
// lcd_bl -> PC10
// lcd_cs -> PC9
// lcd_rs -> PC8
// lcd_wr -> PC7
// lcd_rd -> PC6
// lcd_data -> PB0-15
void lcd_init(void)
{
RCC->APB2ENR|=1<<3; //使能GPIOB时钟
RCC->APB2ENR|=1<<4; //使能GPIOC时钟
RCC->APB2ENR|=1<<0; //使能辅助时钟
JTAG_Set(SWD_ENABLE); //使能SWD,关闭JTAG
GPIOC->CRH&=0XFFFFF000; //PORTC6~10 推挽输出
GPIOC->CRH|=0X00000333;
GPIOC->CRL&=0X00FFFFFF;
GPIOC->CRL|=0X33000000;
GPIOC->ODR|=0X07C0;
GPIOB->CRH=0X33333333; //PORTB 推挽输出
GPIOB->CRL=0X33333333;
GPIOB->ODR=0XFFFF;
}
//说明:数据是16位的,寄存器是八位
void lcd_write_reg(u8 data)
{
lcd_rs=0; //写地址
lcd_cs=0; //使能tft
lcd_data(data);
lcd_wr=0; //拉低写数据
lcd_wr=1; //上升沿把数据送到TFT
lcd_cs=1; //关闭TFT
}
void lcd_write_data(u16 data)
{
lcd_rs=1; //写数据
lcd_cs=0; //使能tft
lcd_data(data);
lcd_wr=0; //拉低写数据
lcd_wr=1; //上升沿把数据送到TFT
lcd_cs=1; //关闭TFT
}
void lcd_writereg (u8 lcd_reg,u16 reg_Value) //写寄存器地址和写寄存器值
{
lcd_write_reg(lcd_reg);
lcd_write_data(reg_Value);
}
u16 lcd_readdata(void)
{
u16 read_data;
GPIOB->CRL=0X88888888; //PB0-7 上拉输入
GPIOB->CRH=0X88888888; //PB8-15 上拉输入
GPIOB->ODR=0XFFFF; //全部输出高
lcd_rs=1;
lcd_cs=0;
//读取数据(读寄存器时,并不需要读2次)
lcd_rd=0;
lcd_rd=1;
read_data=lcd_data_in;
lcd_cs=1;
GPIOB->CRL=0X33333333; //PB0-7 上拉输出
GPIOB->CRH=0X33333333; //PB8-15 上拉输出
GPIOB->ODR=0XFFFF; //全部输出高
return read_data;
}
u16 lcd_readreg(u8 lcd_reg)
{
u16 readdata;
lcd_write_reg(lcd_reg);
readdata=lcd_readdata();
return readdata;
}
tft.h
#ifndef __TFT_H
#define __TFT_H
#include <stm32f10x_lib.h>
#include "sys.h"
// 硬件连接:
// lcd_bl -> PC10
// lcd_cs -> PC9
// lcd_rs -> PC8
// lcd_wr -> PC7
// lcd_rd -> PC6
// lcd_data -> PB0-15
//#define lcd_bl PCout(10)
#define lcd_cs PCout(9)
#define lcd_rs PCout(8)
#define lcd_wr PCout(7)
#define lcd_rd PCout(6)
#define lcd_data(x) GPIOB->ODR=x
#define lcd_data_in GPIOB->IDR
void lcd_init(void);
void lcd_write_reg(u8 data);
void lcd_write_data(u16 data);
void lcd_writereg (u8 lcd_reg,u16 reg_Value); //写寄存器地址和写寄存器值
u16 lcd_readdata(void);
u16 lcd_readreg(u8 lcd_reg);
#endif
读出来的ID只有两位数
|
|