请问怎么解决PSB使其为低电平转换芯片,使用串...

 上传我的文档
 下载
 收藏
自从投入教育界,兢兢业业,对于自己的工作非常满意并充满信心,多年来积累了丰富的工作经验。
 下载此文档
正在努力加载中...
飞思卡尔智能车新手入门解决方案.
下载积分:2500
内容提示:飞思卡尔智能车新手入门解决方案.
文档格式:PDF|
浏览次数:26|
上传日期: 05:45:37|
文档星级:
该用户还上传了这些文档
飞思卡尔智能车新手入门解决方案.
官方公共微信LCM12832ZK型串/并行图形点阵液晶显示模块及其应用 --LED|东商网新闻中心
网商宝营销通
您的位置:
LCM12832ZK型串/并行图形点阵液晶显示模块及其应用
LCM12832ZK型串/并行图形点阵液晶显示模块及其应用
摘要:LCMl2832ZK是一种具有8位/4位并行、2线/3线串行多种接口方式,内带8000多种GB2312简体中文字库的图形点阵液晶显示模块。它具有体积小、功耗低、价格便宜、使用方便等特点,因而广泛应用于许多领域。文中介绍了LCMl2832ZK的性能特点、引脚说明、操作指令以及接口方式,并以AT89C52单片机及2线串行接口方式为例,给出了相应的硬件电路及软件程序代码。
关键词:串/并行接口; 单片机; 液晶显示;LCMl2832ZK
液晶显示模块(LCD Module,简称LCM)是一种将液晶显示器件、连接件、集成电路、PCB线路板、背光源、结构件装配在一起的组件,由于其具有显示内容丰富、体积小、重量轻、寿命长、使用方便、安全省电、无辐射等优点,因此广泛应用于移动通讯、仪器仪表、电子设备、家用电器等各个领域。文中介绍了一种具有串/并多种接口方式,且内部含有GB2312一级、二级简体中文字库的图形点阵液晶模块LCMl2832ZK,该模块是由北京青云创新科技发展有限公司推出的。
1 性能特点
LCMl2832ZK是具有串/并行接口、内部含有中文字库的图形点阵液晶显示模块,其内置的控制/驱动器采用台湾矽创电子公司生产的ST7920[2].因而具有较强的控制显示功能。LCMl2832ZK的液晶显不屏为128%26;#215;32点阵,可显示2行,每行8个汉字。该模块具有2MB的中文字型ROM(CGROM),共提供;#215;16点阵中文字型;同时,为了便于英文和其它常用字符的显示,具有16KB半宽字型ROM(HCGROM),提供128个16%26;#215;8点阵的字母符号字型;另外,绘图显示画面还提供一个64%26;#215;256点阵的绘图区域(GDRAM)及240点的ICONRAM,可以和文字画面混合显示.且内含CGRAM可提供4组软件可编程的16%26;#215;16点阵造字功能。
LCMl2832ZK模块采用LED背光,工作电压/电流分别为3V/1.2mA或5V/2mA,具有2.7~5.5V的宽工作电压范围,还具有睡眠、正常及低功耗工作模式,可满足系统各种工作电压及便携式仪器低功耗的要求。为了适应多种微处理器和单片机接口的需要,模块提供了4位/8位并行、2线/3线串行多种接口方式。另外,模块还提供了画面清除、光标显示/隐藏、显示打开/关闭、显示字符闪烁、光标移位、显示移位、反白显示、睡眠模式等操作指令。该模块可实现汉字、ASCII码、点阵图形的同屏显示,广泛用于各种仪器仪表、家用电器及通信产品中。
2 模块引脚定义和用户命令
为了更好地阐述L,CMl2832ZK的接口方式及控制方法,先介绍该模块的引脚定义及用户命令。
2.1模块引脚定义
LCMl2832ZK模块的引脚定义如表1所列。
表1 LCM12832ZK的引脚定义
LCD亮度调整,外接电阻端
LCD亮度调整,外接电阻端
选择寄存器(并行);0:指令寄存器;1:数据寄存器片选(串行);0:禁止;1:允许
读写控制器(并行)0:写入;1:读输入串行数据(串行)
读写数据起始脚(并行);输入串行脉冲(串行)
控制界面;0:串行;1:并行8/4位
复位信号,低有效
背光源负极
背光源正极
2.2用户命令说明
LCMl2832ZK的指令集包括基本指令集(RE=0)和扩充指令集(RE=1)两大类,用户可以通过这些命令使模块执行相应的显示或控制功能。下面简要介绍部分常用的操作命令:
(1)设定DDRAM(I)isplay Data RAM)地址:
设定DDRAM地址到地址计数器(AC)。第一行
AC范围为:80H~8’7H;第二行AC范围为90H。9’7H。
(2)设定CGRAM((]haracter Generator RAM)地址:
设定CGRAM地址到地址计数器(AC)。
(3)进入点设定(Enter Mode Set)
在数据的读取与写入时,指定光标的移动方向
及显示的位移。
I/D:位地上计数器递增递减选择。
当I/D=1,光标右移,DDRAM的位地址计数器+1;
当I/D=0,光标左移,DDRAM的位地址计数器-1;
S:显示画面整体位移
DESCRIPTION
画面整体左移
画面整体右移
(4)显示状态开/关
控制整体显示、光标、显示、光标位置反白的ON/0FF。
D=1,整体显示ON;D:0,整体显示OFF
C=1,光标显示ON;C=0,光标显示OFF
B=1,光标位置显示反白0N;B=0,光标位置显示反白OFF
(5)清除显示
将DDRAM添满“20H”(space code),并设定DDRAM的地址计数器(AC)到“00H”。
(6)功能设定
DL=l,为8_bit MPU控制界面;DL=O,为4一BITMPU控制界面;
RE=1,为扩充指令集;R:E=0,为基本指令集。
(7)光标或显示移位控制
设定光标的移动与显示的移位控制,该指令并不改变:DDRAM的内容。
Description
光标向左移动
光标向右移动
显示向左移动,且光标跟着移动
显示向右移动,且光标跟着移动
(8)读取忙碌标志(BF)和位址计数器
读取忙碌标志(BF)可以确认内部动作是否完成,同时可以读出位址计数器(AC)的值。
(9)写入资料到RAM
写入资料到内部RAM,写入后会使AC改变。
(10)读取RAM的值
从内部RAM:读取数据,读取后会使.AC改变。
3 接口方式与时序
LCMl2832ZK具有串/并行多种接口方式,易与各种型号单片机、微处理器连接。
3.1并行接口数据传输
当L,CMl2832ZK的PSB脚接高电平时(或模块背面S/P的短路电阻在“P”侧),模块将进入并行传输模式。在并行传输模式下,可由指令位(DL FLAG)来选择8位或4位接口方式,主控制系统将配合“RS”、“Rw”、“E”、D0"D7来完成指令/数据的传送。
在4位传输模式中,每一个8位的指令或数据都将被分为两组:较高4位(D7~D4)的数据会被放在第一组的D7"D4部分,而较低4位(D3。DO)的数据则会被放在第二组的D7~D4部分,在4位传输模式中,D3~。DO界面未使用。
3.2串行接口数据传输
当PSB脚接低电平时(或模块背面S/P的短路电阻在“S”侧),模块将进入串行接口模式。在串行模式下将使用2条线作串行数据的传输,主控系统将配合传输同步时钟线(SCLK)和接收串行数据线(SID)来完成串行传输的动作。
当片选CS为高电位时,同步时钟线(SCLK)输入的讯号才会被接收,否则数据传输将被终止,并且将待传输的串行数据计数重设为第一位。LCM12832ZK还允许同时接人多个液晶显示模块以完成多路信息显示功能。此时,要利用片选端CS构成3线串行接口方式。通常情况下,当系统仅使用一个液晶显示模块时,模块片选脚CS可固定接高电平。LCMl2832ZK模块的串行工作时序如图l所示。
从图1可知,单片机与液晶模块之间传送1字节的数据共需24个时钟脉冲。首先传输起始位元组,即模块在起始位元组需先接收到5个连续的“1”(同步位元字串),此时传输计数将被重置并且串行传输将被同步.紧接着的2个位元字串分别指定数据传输方向(读或写)位元“RW”以及数据寄存器或指令寄存器选择位元“RW”,最后的第8位固定为“0”。在接收到同步位元及“RW”和“RW”起始位元组后,每一个八位元指令将被分为2个位元组接收,其中较高4位(D7一D4)的指令会被放在第1个位元组的高4位,而较低4位(D3~D0)的指令则会被放在第2个位元组的高4位.至于相关其他4位则都为0,如此完成一个字节指令或数据的传送。
4 字符显示及模块使用说明
4.1字符显示
LCMl2832ZK按照每个中文字符16x16点阵将显示屏分为2行8列.共16个区,每个区可显示1个中文字符或2个16x8点阵全高ASCII码字符。LCMl2832ZK内部提供128%26;#215;2字节的字符显示RAM缓冲区(DDRAM)。字符显示是通过将字符显示编码写入该字符显示RAM实现的。根据写入内容的不同,可分别在液晶屏上显示CGROM(中文字库)、HCGROM(ASCII码字库)及CGRAM(自定义字型)的内容。三种不同字符/字型的编码选择范围为:H显示自定义字型.02H~7FH显示半宽ASCII码字符.A1AOH—F7FFH显示8192种GB2312中文字库字型。
4.2模块使用说明
使用LCMl2832ZK显示模块时,应注意以下几点。
①引脚RST和PSB可悬空,不接时,为并行接口方式:引脚VR和 V0之间必须接可变电阻(2.2kΩ~10kΩ),该可变电阻一端接VR,调整端接V0,另一端悬空。
②模块在接收指令前,单片机必须先确认模块内部处于非忙状态,即读取BF标志时BF为“0”,方可接受新的指令。如果在送出一个指令前不检查BF标志,则在前一个指令和该指令中间必须延迟一段较长的时间,即等待前一个指令确定执行完成。
③RE为基本指令集与扩充指令集的选择控制位。当变更RE后,以后的指令集将维持在最后的状态,除非再次变更RE位,否则使用相同指令集时,无需每次均重设RE位。
④串行传输时,如果有多个数据或指令要传送,必须要等到一个指令完成执行完毕后再传送下一个指令或数据,否则会造成指令或数据的丢失。这是因为液晶模块内部没有发送/接收缓冲区。
⑤若要在某一个位置显示中文字符,应先设定显示字符的位置,即先设定显示地址,再写入中文字符编码。
5 LCMl2832ZK应用实例
将引脚PSB接地,片选CS固定接高电平。使用LCMl2832ZK的2线串行接口方式可大大简化液晶显示模块与单片机之间的接口设计。同时,也使液晶显示模块显示汉字变得极为容易,从而改变过去单片机系统人机界面不够友好的弊端。AT89C52单片机与LCMl2832ZK模块的2线串行接口电路如图2所示,下面给出相应的软件程序代码。
;;口线定义
::CS一一一一将CS接固定高电平
SID EQU P1.0
SCLK EQU P1.1
:液晶模块初始化子程序
_INIT_LCM:
;;延时>40ms
MOV R7,#B ;使用8位控制界面
LCALL_WRITE_COMMAND
;;延时>100μs
MOV R7,#B ;使用基本指令集
LCALL-WRIrI"E-COMMAND
;;延时>37μs
MOV R7,#B ;整体显示ON
LCALL _WRITE-COMMAND
;;延时>100μs
MOV R7,#B ;清屏
LCALL -WRITE-COMMAND
;;延时>10ms
MOV R7.加00001 10B :进入点设定
LCALL.WRITE COMMAND
;;字符显示子程序
MOV R7,#80H :设定DDRAM位址
MOV DPTR.#STRINGl
LCALL—PUT_STRING ;在第一行显示字符串1
MOV R7。#90H :设定DDRAM位址
MOV DPTR.}}STRING2
LCALL_PUT_STRING ;在第二行显示字符串2
_PUT_STRING:MOV A,R7
ORL A,#80H
LCALL_WRITE_COMMAND
DISP_STR_LOOP:MOV A,加
MOVC A.@A+DPTR
CJNE A,#o,CONT_STR_DISP
CONT STR DISP:MOV R7,A
LCALL_WRITE_DATA
SJMP DISP_STR_LOOP
STRINGl:D B ’海军航空
工程学院’,0;;汉字代码
STRING2:DB’中文图形
液晶显示’.0
;;串行字节数据发送子程序
_WRITE_DATA:MOV A,
::发送起始位元组”
;;发送第1个位元组的高4
位即串行指令的高4位
MOV C,ACC,7
MOV SID,C
CLR SCLK,
MOV C,ACC,6
MOV SID,C
MOV C,ACC,5
MOV SID,C
MOV C,ACC,4
MOV SID,C
;;发送第1个位元组的低4位”0 0 0 0”
;;发送第2个位元组的高4位即串行指令的低4位
MOV C,ACC,3
MOV SID,C
MOV C,ACC,2
MOV SID,C
MOV C,ACC,1
MOV SID,C
MOV C,ACC,O
MOV SID,C
;;发送第2个位元组的低4位“0 0 0 0”
;;当有连续多个指令被执行时,指令执行时间必须被考虑
分析了LCM12832ZK的性能特点、操作指令、接口方式以及使用注意事项等,并以AT89C52单片机及2线串行接口方式为例,给出了相应的硬件电路及软件程序。由该模块构成的液晶显示方案与同类型的液晶显示模块相比,不论是硬件电路结构的设计还是软件程序的编制都要简洁得多,并且价格也略低于相同点阵的其它同类模块。因此,该模块将会在众多领域得到更广泛的应用。
本文链接:
免责声明:本文仅代表作者个人观点,与东商网无关。
如作品内容涉及版权和其它问题,请联系我们,我们将尽快处理。
热门资讯排行
优质供应商推荐
主营:主营:单片机、嵌入式(1)
& & &12864液晶并口驱动程序用的比较多,但是考虑到有的时候单片机或者MCU的IO口有限时就可以使用串行驱动方法。以下是12864液晶串行时序图,下面就根据这个图来分析一下12864串行时序的实现,只有真正弄清楚了时序图才能真正了解串行传输的原理。
& & 从图上可以看出串行传输时需要用到CS,SCLK,SID三根信号线,但是由于CS是高电平有效,所以也可以把CS长接高电平,那样就只需要两根线就OK了,当然当使用12864串行模式时,PSB引脚必须接低电平,复位RST引脚可以悬空不接,因为12864内部有上电复位电路。
&&由于数据是传输是以一个字节8bits为单位,所以下面贴出传输一个字节的函数实现
void Write_8bits(uint W_bits)
uint i,Temp_
for(i=0; i&8; i++)//总共移动八次,就可以把8bits数据全部传完
Temp_data = W_
Temp_data &&=//把数据依次左移
if((Temp_data&0x80)==0)
//判断对应位是否为0
CLRSID;// SID = 0;
CLRSCLK;//SCLK = 0;//在时钟的下降沿把数据传输出去
SETSCLK;// SCLK = 1;//置高电平,为下次传输做准备
//对应位为1
SETSID;//SID = 1;
CLRSCLK;//SCLK = 0;
SETSCLK; //SCLK = 1;
& & 从时序图上可以看出,要想完整的把一个字节的数据传出去,需要传送三次才能实现,也就是需要传送三个字节,这三个字节分别是:命令控制字,字节的高四位+低四位0组成的字节,字节的低四位+高四位0组成的字节。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&命令控制字11111RWRS0
& & RW代表读还是写液晶,为0代表写,为1代表读。RS代表写命令还是数据,为0代表写命令,为1代表写数据,其余6位固定。所以假设要向液晶写数据,就必须首先发送,写命令就发送。
&&下面是程序的具体实现,这是关键!
void W_1byte(uchar RW, uchar RS, uchar W_data)
uint H_data,L_data,S_ID = 0xf8;
//11111RWRS0
if(RW == 0)
S_ID &=~ 0x04;
//if(RW==1)
S_ID |= 0X04;
if(RS == 0)
S_ID &=~ 0x02;
//if(RS==1)
S_ID |= 0X02;
//以上是根据读写命令以及是发送数据还是命令来组合命令字
H_data = W_
H_data &= 0xf0;
//屏蔽低4位的数据
L_data = W_
//xxxx0000格式
L_data &= 0x0f;
//屏蔽高4位的数据
L_data &&= 4;
//xxxx0000格式
SETCS;//CS = 1; 时能发送
Write_8bits(S_ID);
//发送命令字S_ID
Write_8bits(H_data); //发送H_data
Write_8bits(L_data); //发送L_data
CLRCS;//CS=0
//写入字符串
void LCD_write_string(uchar *s)
for(uint i=0;s[i]!='\0';i++)
W_1byte(0,1,s[i]);
//液晶初始化函数
void LCD_Init_12864(void)//液晶初始化程序
GPIO_InitTypeDef GPIO_InitS
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
CLRPSB;//PSB=0 串行模式
OSTimeDly (40);//关于这个延时根据使用的单片机来决定我这里使用STM32 所以要加延时
W_1byte(0,0,0x30);//功能设置 8位数据,基本指令
OSTimeDly (40);
W_1byte(0,0,0x02); //地址归位
OSTimeDly (40);
W_1byte(0,0,0x06); //游标及显示右移一位
OSTimeDly (40);
W_1byte(0,0,0x0c); //显示状态 ON,游标OFF,反白OFF
OSTimeDly (40);
W_1byte(0,0,0x01);
//清除显示
OSTimeDly (40);
W_1byte(0,0,0x81);//设置写入地址
LCD_write_string(&STM32 ADC&);
//附上一个实用的程序:把数字转换成字符串,n是转换的精度,即是字符串'.'后有几位小数
//有的时候要把AD采样得到的浮点型转换成字符串在液晶上显示,这个函数就非常有用
int ftoa(char *str, float num, int n)
count = 0;
if(str == NULL) return -1;
if(num & 0)
sumI = (int)
//sumI is the part of int
sumF = num - sumI;
//sumF is the part of float
temp = sumI % 10;
*(str++) = temp+48;
}while((sumI = sumI /10) != 0);
while(p & pp)
*p = *p + *
*pp = *p - *
*p = *p -*
r++) = '.';
p = (int)(sumF*10);
*(str++) = temp+48;
if((++count) == n)
sumF = sumF*10 -
}while(!(sumF & -0.000001 && sumF & 0.000001));
*str='\0';
//12864.h 12864头文件
#define uchar
CPU_INT08U
#define uint
CPU_INT16U
#define SETCS
GPIO_SetBits(GPIOC,GPIO_Pin_9)
#define SETSID
GPIO_SetBits(GPIOC,GPIO_Pin_10)
#define SETSCLK
GPIO_SetBits(GPIOC,GPIO_Pin_11) //SCLK
#define SETPSB
GPIO_SetBits(GPIOC,GPIO_Pin_12) //PSB PC.12
#define CLRCS
GPIO_ResetBits(GPIOC,GPIO_Pin_9)
#define CLRSID
GPIO_ResetBits(GPIOC,GPIO_Pin_10)
#define CLRSCLK
GPIO_ResetBits(GPIOC,GPIO_Pin_11)
#define CLRPSB
GPIO_ResetBits(GPIOC,GPIO_Pin_12)
void W_1byte(uchar RW, uchar RS, uchar W_data);
void LCD_Init_12864(void);
int ftoa(char *str, float num, int n);
void LCD_write_string(u8 *s);
//主函数 实现功能STM32 ADC采样 在液晶上显示
#include &12864.h&
#define ADC1_DR_Address
((uint32_t)0x4001244C)
//ADC数据寄存器的基地址
USART_InitTypeDef USART_InitS
//串口、ADC、DMA声明
ADC_InitTypeDef ADC_InitS
DMA_InitTypeDef DMA_InitS // 注:ADC为12位模数转换器,只有ADCConvertedValue的低12位有效
uint16_t ADCConvertedV
void ADC_GPIO_Configuration(void);
static void Delay_ARMJISHU(__IO uint32_t nCount)
for (; nCount != 0; nCount--);
uchar tab1[]=&&;
int main(void)
GPIO_InitTypeDef GPIO_InitS
u16 ADCConvertedValueLocal, Precent = 0, Voltage = 0;
ADC_GPIO_Configuration();
//Delay_ARMJISHU(1000000);//延时
上电复位 不然需要手动复位
LCD_Init_12864();//液晶初始化程序
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
//使能DMA时钟
DMA_DeInit(DMA1_Channel1);
//开启DMA1的第一通道
DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_A
//DMA对应的外设基地址
DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&ADCConvertedV //内存存储基地址
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; //DMA的转换模式为SRC模式,由外设搬移到内存
DMA_InitStructure.DMA_BufferSize = 1;//DMA缓存大小,1个
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_D //接收一次数据后,设备地址禁止后移
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_D //关闭接收一次数据后,目标内存地址后移
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfW
//定义外设数据宽度为16位
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfW
//DMA搬移数据尺寸,HalfWord就是为16位
DMA_InitStructure.DMA_Mode = DMA_Mode_C
//转换模式,循环缓存模式。
DMA_InitStructure.DMA_Priority = DMA_Priority_H //DMA优先级高
DMA_InitStructure.DMA_M2M = DMA_M2M_D
//M2M模式禁用
DMA_Init(DMA1_Channel1, &DMA_InitStructure);
DMA_Cmd(DMA1_Channel1, ENABLE);
ADC_GPIO_Configuration();
ADC_InitStructure.ADC_Mode = ADC_Mode_I //独立的转换模式 ADC_DUALMOD[3:0]=0000;
ADC_InitStructure.ADC_ScanConvMode = ENABLE;//开启扫描模式
ADC_SCAN=1;
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;//开启连续转换模式
ADC_CONT=1;
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_N//ADC外部开关,关闭状态 ; 软件转换 ADC_EXTSEL[2:0]=111;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_R//对齐方式,ADC为12位中,右对齐方式 ADC_ALIGN=0;
ADC_InitStructure.ADC_NbrOfChannel = 1;//开启通道数,1个
ADC_SQR1[23:20]=0000;
//ADC_SQR1[23:20] 设置通道数目的选择
ADC_Init(ADC1, &ADC_InitStructure);
ADC_RegularChannelConfig(ADC1, ADC_Channel_9, 1, ADC_SampleTime_55Cycles5);
//ADC_SMPR2 ADC_SMPR1 设置每个通道的采样时间
//ADC_SQR1[19:0]?DC_SQR1[29:0]?DC_SQR3[29:0]
设置对应通道的转换顺序
适用于多通道采样
//ADC通道组, 第9个通道 采样顺序1,转换时间
ADC_DMACmd(ADC1, ENABLE);
//ADC命令,使能
ADC_ADON=1
ADC_Cmd(ADC1, ENABLE);
//开启ADC1 ADC_DMA=1
ADC_ResetCalibration(ADC1);
//重新校准
while(ADC_GetResetCalibrationStatus(ADC1));
//等待重新校准完成
ADC_StartCalibration(ADC1);
//开始校准
ADC_RSTCAL=1; 初始化校准寄存器
while(ADC_GetCalibrationStatus(ADC1));
//等待校准完成
ADC_CAL=0;
ADC_SoftwareStartConvCmd(ADC1, ENABLE); //连续转换开始,ADC通过DMA方式不断的更新RAM区。
//ADC_SWSTART=1 开始规则转换 切记 软件触发也属于外部事件
ADC_EXTTRIG=1
ADCConvertedValueLocal = ADCConvertedV
Precent = (ADCConvertedValueLocal*100/0x1000);//算出百分比
Voltage = Precent*33;
//3.3V的电平,计算等效电平
W_1byte(0,0,0x91);
W_1byte(0,1,tab1[Precent/10]);
W_1byte(0,1,tab1[Precent]);
W_1byte(0,1,'%');
W_1byte(0,1,' ');
W_1byte(0,1,tab1[Voltage/1000]);
W_1byte(0,1,'.');
W_1byte(0,1,tab1[(Voltage00)/100]);
W_1byte(0,1,tab1[(Voltage0)/10]);
W_1byte(0,1,'V');
void ADC_GPIO_Configuration(void)
//ADC配置函数
GPIO_InitTypeDef GPIO_InitS
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOA, ENABLE);
//使能ADC和GPIOC时钟
//PB1 作为模拟通道输入引脚
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
//输入模式
GPIO_Init(GPIOB, &GPIO_InitStructure);
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:23463次
积分:1561
积分:1561
排名:第17666名
原创:124篇
转载:54篇
(21)(2)(13)(64)(14)(3)(7)(4)(3)(13)(10)(23)(6)(1)安全检查中...
请打开游览器的javascript,然后刷新游览器
浏览器安全检查中… .
还剩 5 秒&

我要回帖

更多关于 三电平 的文章

 

随机推荐