资源简介
这几天在写ht1621b显示LCD的程序,主芯片是Stm32f10的芯片。对于stm32和ht1621b的运用和操作本人是新手,属于赶鸭子上架,通过查看datasheet等资料和网上查看前人写的程序终于完成了LCD的显示,在此做个记录以备不时之需,并希望像能帮助想我一样的新人少走点弯路和共同学习。
代码片段和文件信息
#include “lcd.h“
#include “stm32f10x.h“
#include
#include
#include
#include “Stm32f10x_delay.h“
int bLcd_flag = 0;
int bLcd_timer = 0;
///////////////////////////////////////////////////驱动函数
/*
* LCD 模式写入
* 入口:MODE :COM(命令模式) DAT(数据模式)
* 出口:void
*/
void write_mode(unsigned char MODE) //写入模式数据or命令
{
GPIO_ResetBits(GPIOA HT1621_WR); // RW = 0;
Delay_us(10);
GPIO_SetBits(GPIOA HT1621_DATA); // DA = 1;
GPIO_SetBits(GPIOA HT1621_WR); // RW = 1;
Delay_us(10);
GPIO_ResetBits(GPIOA HT1621_WR); // RW = 0;
Delay_us(10);
GPIO_ResetBits(GPIOA HT1621_DATA); // DA = 0;
GPIO_SetBits(GPIOA HT1621_WR); // RW = 1;
Delay_us(10);
GPIO_ResetBits(GPIOA HT1621_WR); // RW = 0;
Delay_us(10);
if (0 == MODE)
{
GPIO_ResetBits(GPIOA HT1621_DATA); // DA = 0;
}
else
{
GPIO_SetBits(GPIOA HT1621_DATA); // DA = 1;
}
Delay_us(10);
GPIO_SetBits(GPIOA HT1621_WR); // RW = 1;
Delay_us(10);
}
/*
* LCD 命令写入函数
* 入口:cbyte 控制命令字
* 出口:void
*/
void write_command(unsigned char Cbyte)
{
unsigned char i = 0;
for (i = 0; i < 8; i++)
{
GPIO_ResetBits(GPIOA HT1621_WR);
//Delay_us(10);
if ((Cbyte >> (7 - i)) & 0x01)
{
GPIO_SetBits(GPIOA HT1621_DATA);
}
else
{
GPIO_ResetBits(GPIOA HT1621_DATA);
}
Delay_us(10);
GPIO_SetBits(GPIOA HT1621_WR);
Delay_us(10);
}
GPIO_ResetBits(GPIOA HT1621_WR);
Delay_us(10);
GPIO_ResetBits(GPIOA HT1621_DATA);
GPIO_SetBits(GPIOA HT1621_WR);
Delay_us(10);
}
/*
* LCD 地址写入函数
* 入口:cbyte地址
* 出口:void
*/
void write_address(unsigned char Abyte)
{
unsigned char i = 0;
Abyte = Abyte << 2;
for (i = 0; i < 6; i++)
{
GPIO_ResetBits(GPIOA HT1621_WR);
//Delay_us(10);
if ((Abyte >> (7 - i)) & 0x01)
{
GPIO_SetBits(GPIOA HT1621_DATA);
}
else
{
GPIO_ResetBits(GPIOA HT1621_DATA);
}
Delay_us(10);
GPIO_SetBits(GPIOA HT1621_WR);
Delay_us(10);
}
}
/*
* LCD 数据写入函数
* 入口:Dbyte数据
* 出口:void
*/
void write_data_8bit(unsigned char Dbyte)
{
int i = 0;
for (i = 0; i < 8; i++)
{
GPIO_ResetBits(GPIOA HT1621_WR);
//Delay_us(10);
if ((Dbyte >> (7 - i)) & 0x01)
{
GPIO_SetBits(GPIOA HT1621_DATA);
}
else
{
GPIO_ResetBits(GPIOA HT1621_DATA);
}
Delay_us(10);
GPIO_SetBits(GPIOA HT1621_WR);
Delay_us(10);
}
}
void write_data_4bit(unsigned char Dbyte)
{
int i = 0;
for (i = 0; i < 4; i++)
{
GPIO_ResetBits(GPIOA HT1621_WR);
//Delay_us(10);
if ((Dbyte >> (3 - i)) & 0x01)
{
GPIO_SetBits(GPIOA HT1621_DATA);
}
else
{
GPIO_ResetBits(GPIOA HT1621_DATA);
}
Delay_us(10);
GPIO_SetBits(GPIOA HT1621_WR);
Delay_us(10);
}
}
///////////////////////////////////////////////////接口函数
void ht1621_init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;// declare the structure
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 10581 2016-09-18 11:57 lcd.c
文件 2059 2016-08-23 16:38 lcd.h
- 上一篇:多目标问题RM-MOEAMOEAD的改进版,by张青富老师
- 下一篇:重启式恶搞软件
评论
共有 条评论