自制单片机STC12C5A60S2+1602电压表

发布者:BeaLaity0170最新更新时间:2020-09-17 来源: 51hei关键字:单片机  STC12C5A60S2  1602电压表 手机看文章 扫描二维码
随时随地手机看文章

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                for(j=0;j<123;j++);

        }


/******************************

                初始化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);

        }


关键字:单片机  STC12C5A60S2  1602电压表 引用地址:自制单片机STC12C5A60S2+1602电压表

上一篇:基于单片机的波形发生器仿真设计
下一篇:STC15单片机利用ESP8266控制LED 源程序

推荐阅读最新更新时间:2024-11-05 16:05

FPGA实现UART和MCU一体化设计
计算机技术和微电子技术的发展为现代电子设计提供了新的方法和途径。传统的电子设计采用功能独立的分立元件进行功能组合从而实现特定的功能,计算机设计初期也一直采用这种模式。但是随着近代电子技术的进步,尤其是FPGA(Field Programmable Gate Array)的出现,使得电子设计和计算机设计都发生了很大的变化,尤其是在数字电子系统的设计领域。利用现场可编程门阵列FPGA可以实现任何数字器件的功能,而且还可以大大缩短设计时间,减少PCB的面积,提高信号的传输质量,提高系统的可靠性,增加设计的灵活性和可维护性。本文采用FPGA技术实现一个MCU与串行通信外设进行简易通信的平台,一方面了解了计算机的一些控制原理和工作流程;另
[单片机]
FPGA实现UART和<font color='red'>MCU</font>一体化设计
51单片机实习-数码管动态显示4399(模块化编程)
#include reg52.h sbit wei0=P1^0; sbit wei1=P1^1; sbit wei2=P1^2; sbit wei3=P1^3; int zxm ={0x98,0x98,0xb0,0x99}; void delay(int i) { while(i--) { int j=0; for(;j 115;j++); } } void display() { int i; for( i=0;i 4;i++) { switch(i) { case 0: wei0=0,wei1=1,wei2=1,wei3=1;break; case
[单片机]
51<font color='red'>单片机</font>实习-数码管动态显示4399(模块化编程)
基于单片机的工频相角源
0概述 具有一定相位差的两列正弦信号(简称相角源),在电力系统各种计量仪表的自动化校验与继电保护中使用的继电器的检验电源等领域中有着广泛的使用,为此,我们设计了一种工频相角源,该相角源的设计方法也是目前国内外电力系统及其他一些行业正积极推广的新技术,它以单片机为控制核心,通过间接频率合成器 (IS)改变信号的频率,通过数字波形发生器产生两列信号并实现数字调角,通过程控衰减器实现幅度调整。总体框图如图1所示,可实现的技术指标如下:频率范围为1Hz~1kHz,最小步长为1Hz,相角范围为0°~360°,最小步长为0.5°,电压有效值范围为0~10V,调整的最小步长为0.01V。 1间接频率合成器(IS) 在相角源
[单片机]
基于<font color='red'>单片机</font>的工频相角源
爱特梅尔成立深圳大学–Atmel AVR微控制器实验室
爱特梅尔公司(Atmel® Corporation) 宣布,基于企业与高校联手培养合格工程师的共同目标,深圳大学–Atmel AVR微控制器实验室于2010年4月29日正式挂牌成立,成为爱特梅尔公司在中国地区的11个AVR微控制器大学实验室之一。该实验室将承担机电与控制工程学院本科生微控制器的实践教学,并作为深圳大学机电与控制工程学院的科研实践基地,成为推动双方长远发展、更好合作的开端。 深圳大学–Atmel AVR微控制器实验室成立暨揭牌仪式于4月29日在深圳大学科技楼3号报告厅举行。深圳大学副校长阮双琛教授、深圳大学教务处处长徐晨教授、深圳大学设备处副处长张红兵教授、机电与控制工程学院院长徐刚教授、机电与控制工程
[单片机]
PIC单片机双机异步通信程序详解
1 单片机PIC1编程(发送部分) #include /*该程序实现单片机双机异步通信功能,该程序是发送部分*/ unsigned char tran ; /*定义一个数组存储发送数据*/ unsigned char k,data; /*定义通用寄存器*/ cONST char table ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0XD8,0x80, 0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x7f,0xbf,0x89,0xff}; /*不带小数点的显示段码表*/ /*SPI显示初始化子程序*/ void SPIINIT() {
[单片机]
平凡单片机教学—第三讲 单片机的内外部结构分析二
一、 程序的完善 上一次我们的程序实在是没什么用,要灯亮还要重写一下片子,下面我们要让灯不断地闪烁,这就有一定的实用价值了,比如可以把它当成汽车上的一个信号灯用了。怎样才能让灯不断地闪烁呢?实际上就是要灯亮一段时间,再灭一段时间,也就是说要P10不断地输出高和低电平。怎样实现这个要求呢?请考虑用下面的指令是否可行: SETB P10 CLR P10 这是不行的,有两个问题,第一,计算机执行指令的时间很快,执行完SETB P10后,灯是灭了,但在极短时间(微秒级)后,计算机又执行了CLR P10指令,灯又亮了,所以根本分辨不出灯曾灭过。第二,在执行完CLR P10后,不会再去执行SETB P10指令,所以以
[单片机]
一种单片机智能多接口的全硬件音频系统的解决方案
0 引言 在传统的硬件体系结构中,接口被看作是相应外部设备的一部分,每个接口一般都只能连接到同一种设备上。虽然通过所谓“菊花链”(daisyohain)方式可以把若干同种设备连接到同一接口上,却不能将不同种类的设备混合连接到同一接口上,由于目前USB接口的设备越来越丰富,种类越来越多,为了满足这样的需求,这里给出一种USB 2.O接口的解决方案,通过USB接口读取各种USB设备;通过SD卡接口,读取各种主流存储卡。该方案支持常用的USB存储设备(包括U盘/USB硬盘/USB闪存盘/USB读卡器)和SD卡(包括标准容量SD卡和高容量HC-SD卡以及协议兼容的MMC卡和TF卡)。 本文提出了一种智能多接口的全硬件音频系统的解决方案
[单片机]
MCU SOURCE FILE_键盘
#include atmel/AT89X52.H #include intrins.h #define uchar unsigned char #define uint unsigned int #define cmd P0 //定义LCM的数据接口,请根据实际情况修改 #define lcmbusy P0_7 //定义LCM数据接口的第8位所在的端口,请根据实际情况修改 #define RS P3_4 //定义LCM的RS引脚所在的端口,请根据实际情况修改 #define RW P3_3 //定义LCM的RW引脚所在的端口,请根据实际情况修改 #define EN P3_2 //定义LCM的EN引脚所在的端
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved