LCD1602 D0~D7接P0口,RS=P3.1,RW=P3.2,sbit E=P3.3。
电压测试口接P1.0。供电电压要稳定5V才能准确测量。另外因为没有加电阻,只能测5V以下电压。
废话少说,直接上实物图。
单片机源程序如下:
#include "reg51.h"
#include "intrins.h"
#define LCD P0 //LCD1602数据接口
sbit RS=P3^1; //设置RS引脚接口,RS=0,指令寄存器;RS=1,数据寄存器
sbit RW=P3^2; //设置R/W引脚接口,R/W=0,写;R/W=1,读
sbit E=P3^3; //设置E引脚接口,E允许信号
/*Declare SFR associated with the ADC */
sfr ADC_CONTR=0xBC; //ADC control register
sfr ADC_RES=0xBD; //ADC high 8-bit result register
sfr ADC_LOW2=0xBE; //ADC low 2-bit result register
sfr P1ASF=0x9D; //P1 secondary function control register
unsigned char V[]="000000";
unsigned int ADC_temp=0;
/*Define ADC operation const for ADC_CONTR*/
#define ADC_POWER 0x80 //ADC power control bit
#define ADC_FLAG 0x10 //ADC complete flag
#define ADC_START 0x08 //ADC start control bit
#define ADC_SPEEDLL 0x00 //420 clocks
#define ADC_SPEEDL 0x20 //280 clocks
#define ADC_SPEEDH 0x40 //140 clocks
#define ADC_SPEEDHH 0x60 //70 clocks
/******************************
******************************/
void Delay(unsigned int n)
{
unsigned int i=0,j=0;
for(i=0;i } /****************************** 初始化ADC ******************************/ void InitADC() { P1ASF=0xff; ADC_RES=0; ADC_CONTR=ADC_POWER | ADC_SPEEDLL; Delay(2); } /****************************** 读取ADC ******************************/ unsigned char GetADCResult(unsigned char ch) { ADC_CONTR=ADC_POWER | ADC_SPEEDLL | ch | ADC_START; _nop_(); _nop_(); _nop_(); _nop_(); while (!(ADC_CONTR & ADC_FLAG)); ADC_CONTR &=~ADC_FLAG; return ADC_RES; } /****************************** LCD忙检测 ******************************/ void CheckBusy(void) { unsigned int nTimeOut=0; RS=0; RW=1; E=0; E=1; while((LCD&0x80)&&(++nTimeOut !=0)); E=0; RS=0; RW=1; } /****************************** LCD发送命令或数据 ******************************/ void SendCmdorData(unsigned char byCmdorData,bit DI) { CheckBusy(); RS=DI; RW=0; E=0; LCD=byCmdorData; Delay(5); E=1; Delay(5); E=0; RW=1; RS=0; } /****************************** LCD初始化子 ******************************/ void Init(void) { SendCmdorData(0x38,0); Delay(50); SendCmdorData(0x01,0); Delay(50); SendCmdorData(0x06,0); Delay(50); SendCmdorData(0x0c,0); Delay(50); } /****************************** 地址转换 ******************************/ void SetAddress(unsigned char x,y) { unsigned char byAddress; switch(x) { case 1: byAddress=0x80+y; break; case 2: byAddress=0xC0+y; break; default:break; } SendCmdorData(byAddress,0); }
上一篇:基于单片机的波形发生器仿真设计
下一篇:STC15单片机利用ESP8266控制LED 源程序
推荐阅读最新更新时间:2024-11-05 16:05
设计资源 培训 开发板 精华推荐
- 【智能车】智能遥控小车
- OM1326SMM 1.5A 正电压稳压器典型应用
- 使用 Analog Devices 的 LT3467AIS6 的参考设计
- A100053,Arduino Micro - 基于 ATmega32u4 8bit ATmega AVR MCU 的零售开发套件平台
- MC-146_MSP430,MSP430和F5xx系列SOC应用处理器的振荡电路和晶体单元选型指南
- AD8657ARMZ同相运算放大器配置的典型应用电路
- L7806C 功率 AM 调制器的典型应用(单位电压增益,IO = 0.5)
- 长春电子科技学院-电子工程学院-电子创新协会纪念卡片
- EVAL-AD7770FMCZ,用于评估 AD7770 8 通道、24 位、同步采样、具有功率调节功能的 Sigma-Delta ADC 的评估板
- 4461C-868-PDK,用于 Si4461 868-MHz 射频收发器的 EZRadio-PRO 无线开发套件
- 【 有奖直播】 掌握潮流~TI DLP®技术在汽车上的创新及全新应用
- 开关电源兴趣小组招募,只为学习开关电源
- 【EEWORLD第六届社区明星人物】8月明星人物
- 美信基础模拟IC APP下载 助力您创新模拟设计!评论、抢楼全有礼!
- 下载有礼|精华课件汇编:泰克半导体器件的表征及可靠性研究交流会暨吉时利测试测量年度研讨会
- 预约有礼:以光代电,硅光芯片了解一下~ 走进工程师网络学堂直播,赢好礼
- 有奖直播:新科技、新课堂、新学期~ ADI软件定义无线电ADALM-Pluto入门实战
- 有奖问答|ADI应用之旅——电池管理及智慧储能篇
- 成都站报名 | Keysight 高速互联技术研讨会
- 直播|基于英特尔® Agilex™ FPGA的PCIe Gen5和CXL解决方案