12864的STM32单片机显示程序下载: 显示.rar
主要的程序预览:
- #include "stm32f10x.h"
- #include "delay.h" //必须配合delay.c和delay.h文件使用,所以要包含delay.h。
- #include "display12864.h"
- #define u16 unsigned short //为了可移植性好,对这两个 STM 32 已经定义过的变量,再定义一次。
- #define u8 unsigned char
- /********** 以下是相关引脚定义。**************/
- #define DisIO GPIOC //定义12864要使用的I/O端口。
- #define DisClk RCC_APB2Periph_GPIOC //定义12864要使用的I/O端口的时钟。
- #define Data GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7
- //定义12864使用的数据引脚。
- #define RS GPIO_Pin_9
- #define RW GPIO_Pin_10
- #define EN GPIO_Pin_11 //定义使能端使用的引脚。
- #define PSB GPIO_Pin_12 //定义并,串行数据模式的选择端口使用的引脚。
- /*********************************************/
- GPIO_InitTypeDef GPIOStru; //定义用于定义所以引脚为输出的变量。
- void IOInitOut(void) //把所有端口初始化为推挽输出模式的函数。
- {
- GPIOStru.GPIO_Mode = GPIO_Mode_Out_PP;//定义所有的引脚为推挽输出的变量初始化。
- GPIOStru.GPIO_Speed = GPIO_Speed_50MHz;
- GPIOStru.GPIO_Pin = Data|RS|RW|EN|PSB;
- RCC_APB2PeriphClockCmd(DisClk,ENABLE);
- GPIO_Init(DisIO,&GPIOStru);
- }
- void IOInitin(void) //把数据引脚初始化为浮空输入的函数。
- {
- GPIOStru.GPIO_Mode = GPIO_Mode_IN_FLOATING;//定义数据引脚为浮空输入的变量初始化。
- GPIOStru.GPIO_Speed = GPIO_Speed_50MHz;
- GPIOStru.GPIO_Pin = Data;
- RCC_APB2PeriphClockCmd(DisClk,ENABLE); //把所有端口初始化为输出模式的函数。
- GPIO_Init(DisIO,&GPIOStru);
- }
- void WaitBusy(void) //等待12864的忙状态结束的函数。
- {
- IOInitIn(); //把数据引脚定义为浮空输入;
- GPIO_ResetBits(DisIO,RS); //RS = 0.
- GPIO_SetBits(DisIO,RW); //RW = 1.
- GPIO_SetBits(DisIO,EN); //EN = 1.
- while(GPIO_ReadInputData(DisIO) & 0x0080); //只要位7的值,位7是忙标志位。
- GPIO_ResetBits(DisIO,EN); //EN = 0;
- IOInitOut(); //把所有引脚定义为输出。
- }
- void WriteCmd(u8 cmd) //写命令函数。
- {
- WaitBusy();
- GPIO_ResetBits(DisIO,RS); //RS = 0.
- GPIO_ResetBits(DisIO,RW); //RW = 0.
- GPIO_SetBits(DisIO,EN); //EN = 1.
- DisIO->ODR=((DisIO->ODR & 0xff00)|cmd); //此处,只有直接操作寄存器才能
- //达到,只改变输出数据寄存器ODR的低8位,其它位
- //不变的目的。因为,只有低8位是数据引脚,
- //其它位可能是控制引脚,不能改变。
- delay_ms(2);
- GPIO_ResetBits(DisIO,EN); //EN = 0;
- delay_ms(2);
- }
- void WriteData(u8 data) //写数据函数。
- {
- WaitBusy();
- GPIO_SetBits(DisIO,RS); //RS = 1.
- GPIO_ResetBits(DisIO,RW); //RW = 0.
- GPIO_SetBits(DisIO,EN); //EN = 1.
- DisIO->ODR=((DisIO->ODR & 0xff00)|data); //同上。
- delay_ms(2);
- GPIO_ResetBits(DisIO,EN); //EN = 0;
- delay_ms(2);
- }
- void InitDis(void) //初始化 12864 和要用到的 STM 32 的引脚。
- {
- IOInitOut();
- delay_init(8); //初始化延时函数的微妙计数基数。
- GPIO_SetBits(DisIO,PSB); //令PSB=1,设置为并行数据模式。
- delay_ms(2);
- WriteCmd(0x30); //选择基本指令集,和,8位数据模式。
- delay_ms(2);
- WriteCmd(0x0c); //开显示,无游标,不反白.
- delay_ms(2);
- WriteCmd(0x01); //清除显示,并将 DDRAM 的地址计数器 AC 设为 00H.
- delay_ms(2);
- WriteCmd(0x06); //设置,外部读写数据后,地址记数器 AC 会自动加 1。
- delay_ms(2);
- WriteCmd(0x80); //将 DDRAM 地址计数器 AC 设为 0.
- delay_ms(2);
- }
- void DisStr(u8 *s) //显示字符串的函数。
- {
- while(*s != '')
- {
- WriteData(*s);
- s++;
- delay_ms(2);
- }
- }
- void DisInt(long int num) //显示整型变量的函数,最多显示16位的整数。只能显示正数。
- {
- u8 temp[17];
- u8 str[17];
- int i=0,j=0;
- while(num != 0) //这里不能用num%10 != 0,如果num是10的整数倍,
- //例如,100,这样就会出错,根本就不能进入循环体。
- {
- temp = (num%10)+0x30;
- num/=10;
- i++;
- }
- i--; //因为i在退出循环之前还自加了一次,此时,
- //指向最后一个存储有用值的元素的后一个位置。
- while(i != -1) //因为i=0时,temp[0]还是有用值。
- {
- str[j] = temp;
- j++;
- i--;
- }
- str[j]=''; //因为i在退出循环之前还自加了一次,此时,
- //指向最后一个存储有用值的元素的后一个位置。
- DisStr(str);
- }
- void DisFloat(float fnum) //显示有4位小数的浮点数,总位数不超过16位。
- {
- long int num = fnum*10000;
- u8 temp[17];
- u8 str[17];
- int i=0,j=0;
- while(num != 0)
- {
- temp = (num%10)+0x30;
- num/=10;
- i++;
- if(i == 4) //4位小数处理完后,加入小数点。
- {
- temp = '.';
- i++;
- }
- }
- i--;
- while(i != -1)
- {
- str[j] = temp;
- j++;
- i--;
- }
- str[j]='';
- DisStr(str);
- }
- /*以下是光标定位函数,第一个参数为行坐标,第二个为列坐标,起始坐标是1行1列。
- 只能以16个点的宽度为单位移动。*/
- void locate16(int row, int col)
- {
- switch(row)
- {
- case 1: WriteCmd(0x80+col-1); break;
- case 2: WriteCmd(0x90+col-1); break;
- case 3: WriteCmd(0x88+col-1); break;
- case 4: WriteCmd(0x98+col-1); break;
- }
- }
- /*光标定位函数定义结束。*/
建议把fwlib组里的.c文件生成一个.lib库吧,因为一般是不需要改这部分的代码的,
当需要重新编译的时候,全部库文件都编译的话会把速度拖慢的。。。
先把其它组的 include in target build 属性去掉
这个是默认的选择,点到没勾了就表示去掉了
然后设置项目的output属性生成lib文件
|
0
|
|
|
|