IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> Proteus C51仿真学习板-综合例程 -> 正文阅读

[嵌入式]Proteus C51仿真学习板-综合例程

Proteus C51仿真学习板

Proteus C51仿真学习板0——Keil&Proteus

Proteus C51仿真学习板1——LED点灯

Proteus C51仿真学习板2——数码管

Proteus C51仿真学习板3——定时器

Proteus C51仿真学习板4——外部中断

Proteus C51仿真学习板5——串口中断

Proteus C51仿真学习板6——ADC

Proteus C51仿真学习板7——LCD1602

Proteus C51仿真学习板8——矩阵键盘

Proteus C51仿真学习板9——IIC

Proteus C51仿真学习板10——DAC
?

根据前面学习的10个例程,进行综合demo设计。

功能需求:

??? 1、ADC采集数据,数码管显示对应ADC值以及电压值,定时器5s一次采集;

??? 2、ADC数据保存到EEPROM并通过串口打印;

??? 3、矩阵键盘键值读取,LCD1602显示。

????基本囊括了8个例程。对于初学者而言,既是对前面例程的复习,也是一个总结。软硬件水平均可提高,你值得拥有。

C51-Demo

?

/**
******************************************************************************
*   @file      main.c
*   @author    Alex——小白
*   @version   V1.0
*   @date      2021.10.1
*   @brief     ALL综合例程:1、ADC采集数据5s一次, 并存储到EEPROM,数码管显示对应电压,且读出对应数据串口打印;
                2、矩阵键盘获取键值,LCD1602显示。
*  @store     Proteus仿真店子——公众号
*  @Link      https://shop484534014.taobao.com/
*  @Email     844545015@qq.com
******************************************************************************
*   @attention  All Rights Reserved  
**/
?
#include <main.h>
?
void main(void)
{
?
  bit DisplayCol = 0; 
  static uint8_t i = 0;
  static uint8_t DisplayRow = 0, GetKeyValue = 0xFF;
  static uint8_t SaveAddr = 0, ReadValue = 0;
  static uint16_t Voltage = 0, ADCValue = 0;
?
  TIMER0.Init();        //TIMER0  初始化  
  UART.Init();        //UART    初始化  
  KeyPad.Init();        //KeyPad  初始化
  LCD1602.Init();        //LCD1602 初始化  
  ADC.Init();          //ADC     初始化
  I2C.Init();          //I2C     初始化  
  SEG.Init();          //SEG     初始化
  Delay.ms(20);
?
  while(1)
  {  
    GetKeyValue = KeyPad.KeyValue();  //获取按键值
    
    if(GetKeyValue != 0xFF)        //判断按键值是否有效
    {
      if(DisplayRow == 16)      //计满16列后换行
      {
        DisplayRow = 0;
        DisplayCol = !DisplayCol;
      }    
      UART.SendString("KeyValue:",9);  //有效,串口打印数据
      UART.SendData(GetKeyValue);    
      UART.SendString("\r\n",2);
      LCD1602.WriteChar(DisplayRow,DisplayCol,GetKeyValue);  //LCD显示键值
      DisplayRow++;          //变量行+1  
    }
    else 
    {    
      if(TIMER0.time > 4)        //5s采集一次
      {
        ADCValue = 0;                //清零  
        for(i=0;i<8;i++)              //ADC采集8次
        {
          ADCValue += ADC.GetValue();        
        }
        ADCValue = ADCValue>>3;            //取平均
        EEPROM.WriteAddrData(SaveAddr,ADCValue);  //写入EEPROM
        Delay.ms(50);
        ReadValue = EEPROM.ReadAddrData(SaveAddr);  //读出数据
        
        if(ADCValue == ReadValue)          //判断读写是否正确
        {
          Voltage = ReadValue * 1.95;        //电压转换1.95=5*100/256
          UART.SendString("ReadValue:",10);
          UART.SendData(ReadValue/100 + '0');
          UART.SendData(ReadValue%100/10 + '0');
          UART.SendData(ReadValue%10 + '0');          
          UART.SendString(" Voltage: ",10);
          UART.SendData(Voltage/100 + '0');
          UART.SendData('.');
          UART.SendData(Voltage%100/10 + '0');
          UART.SendData(Voltage%10 + '0');
          UART.SendString("\r\n",2);
        }
        else UART.SendString("Error Reading!\r\n",16);
        TIMER0.time = 0;
        SaveAddr++;                  //地址每次加1
      }
    }
    
    SEG.Display(0,ReadValue/100);            //数码管显示ADC值
    SEG.Display(1,ReadValue%100/10);
    SEG.Display(2,ReadValue%10);
    SEG.Display(5,Voltage/100);              //数码管显示电压值
    SEG.Display(5,16);              
    SEG.Display(6,Voltage%100/10);
    SEG.Display(7,Voltage%10);
    
  }
}
?
/******************************************************************************
                              END
******************************************************************************/
    
?

如需全部例程以及综合demo的Keil源码和Proteus工程,请关注:

Proteus仿真店子

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-01-03 16:16:35  更:2022-01-03 16:16:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 12:51:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码