51单片机学习--数字时钟数字电压表

本文介绍了如何使用51单片机实现数字电压表和数字时钟的功能,包括通过ADC0808进行电压测量、显示时分秒,并通过按键设定时间。此外,还扩展了串口通信功能,当发送特定指令时,单片机将返回当前电压值和时间。附带了proteus仿真和代码资源。
摘要由CSDN通过智能技术生成

一、学习要求 
1.功能 1:数字电压表(0808或stc A/D)。 
2.功能 2:数字时钟,显示时、分、秒,可通过按键设定时间。 
3.将功能 1、功能 2 合并。 
4.扩展功能。(发送“cx”字符串到单片机,单片机将会返回电压值和时间)

解:

proteus原理图及仿真、代码和使用方法等相关文件:https://download.csdn.net/download/chenger_32123/10577316

实现了LCD1602里光标的移动、闪烁的同时电压值可以同步显示。

基本功能:

 

串口:

 

 

 

/*********************main.c**********************/

 

/*********************main.c**********************/

/*******************************************
//2017/12/4 
//芯片:STC89C52 
//晶振:12MHz  12T模式:12个时钟周期做一个机器周期
//功能:lcd1602显示adc0808采集到的电压值,同时显示时钟,时钟可通过按键设置。
//串口波特率:2400bps@12.000MHz
*******************************************/
#include<reg52.h>
#include"main.h"
#include"lcd1602.h"
#include"adc0808.h"
#include"read_key.h"
/**************************************
//主函数
***************************************/
void main()
{    
    uchar value[COUNT];
    uchar count=0;
    uint voltage;
    uchar display_flag=0;    //lcd1602显示标志
    initialize();    //初始化
    LCD_StringOut(0x80,"Time:");//lcd1602第一行显示
    LCD_StringOut(0x80+0x40,"Voltage:"); //lcd1602第二行显示
    while(1)
    {
        value[count]=digital_out();    //获取adc808数字输出量并保存在数组中
        count++;
        if(COUNT==count)   //若获取够了COUNT个数则求均值
        {    
            voltage=filter(value,count)*1.0/255*VOLTAGE_REFER;
            count=0;
        }

        if(key_flag)   //约每20mS扫描一次键盘
        {
            key_process(read_key()); //读键盘值并处理
            key_flag=0;
            display_flag++;

        }

        if(display_flag>=10)    //约每200mS更新一次LCD1602显示
        {
            lcd_display(voltage); //LCD1602显示电压值
            display_flag=0;         //显示标志变量清零
        }

        if(inquire_flag)       //发送时间到PC
        {    
            serial_send();
            inquire_flag=0;    //查询标志清零
        }
    }
}
/*****
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值