ARM------->第七天,ADC模块、Qt串口控制助手

2023-05-16

1.ADC

模拟量转换为数字量

模拟量:连续的 比如,温度  电压  电阻  高度  湿度。。。

数字量:离散的

 

 在前几天的代码基础下,添加adc.c文件、adc.h文件,修改makefile工程文件和main.c文件

adc.c文件:

#include "adc.h"
#include "uart.h"

void adc_init()
{
	//选择通道
	ADCMUX = 3;
	//设置分辨率为10
	ADCCON &= ~(0X1 << 16);
	
	//分频使能
	ADCCON |= 0x1 << 14;
	
	//设置分频值
	ADCCON = ADCCON & ~(0XFF << 6) | 19 << 6;
	
	//adc工作在普通模式,不是省电模式
	ADCCON &= ~(0X1 << 2);
	
	
	//自己手动启动,不是读的时候启动
	ADCCON = ADCCON & ~(0x1 << 1);
}

//ADC模块接收数字量
int adc_read()
{
	ADCCON |= 0X1;
	while(!(ADCCON & (0X1 << 15)));
	int ret = ADCDAT & 0X3FF;
	return ret;
}

//ADC模块将数字量转换成模拟量
void send_adc(int data)
{
	uart_putc(' ');
	int tmp = data / 10;
	
	int a   = tmp / 100 + '0';	//数字量的百位取出,加'0'转换成相应的字符
	uart_putc(a);			//发送相应的字符
	
	int b = tmp / 10 % 10 + '0';	//数字量的十位取出,加'0'转换成相应的字符
	uart_putc(b);			//发送相应的字符
	
	int c = tmp % 10 + '0';			//数字量的个位取出,加'0'转换成相应的字符
	uart_putc(c);					//发送相应的字符
	uart_putc(' ');
}

adc.h文件:

#ifndef _ADC_H_
#define _ADC_H_

#define ADCCON *((volatile unsigned int *)0x126C0000)
#define ADCMUX *((volatile unsigned int *)0x126C001C)
#define ADCDAT *((volatile unsigned int *)0x126C000C)


void adc_init();
int adc_read();
void send_adc(int data);
#endif

makefile工程文件:

CROSS = arm-none-linux-gnueabi-
CC=$(CROSS)gcc
LD=$(CROSS)ld
OBJCOPY=$(CROSS)objcopy

all:
	$(CC) -g -c -o main.o main.c 
	$(CC) -g -c -o led4.o led4.c 
	$(CC) -g -c -o start.o start.s  
	$(CC) -g -c -o uart.o uart.c 
	$(CC) -g -c -o pwm.o  pwm.c	
	$(CC) -g -c -o adc.o  adc.c	
	$(LD) start.o led4.o  main.o uart.o pwm.o adc.o -Tmap.lds -o led4.elf
	$(OBJCOPY)  -O binary -S led4.elf led4.bin
	$(CROSS)objdump -D led4.elf > led4.dis
	 
clean:
	rm -f *.o *.elf *.bin *.dis

main.c文件:

#include "led4.h"
#include "uart.h"
#include "adc.h"
#include "pwm.h"

void delay()
{
	int i;
	for(i = 0; i < 2000000; i++);
}

int main()
{
	//初始化adc模块
	adc_init();
	//初始化Led灯
	led5_init();
	led4_init();
	led3_init();
	led2_init();
	//初始化uart
	uart_init();
	//初始化蜂鸣器
	pwm_init();
	int i=10;//设置流水灯次数
	while(1)
	{
		char c=uart_getc();
		if('1'==c)
		{
			led2_on();
			led3_off();
			led4_off();
			led5_off();
		}
		else if('2'==c)
		{
			led3_on();
			led2_off();
			led4_off();
			led5_off();
		}
		else if('3'==c)
		{
			led4_on();
			led2_off();
			led3_off();
			led5_off();
		}
		else if('4'==c)
		{
			led5_on();
			led2_off();
			led3_off();
			led4_off();
		}
		else if('5'==c)
		{
			pwm_no();
		}
		else if('6'==c)
		{
			pwm_off();
		}
		else if('7'==c)
		{
			while(--i)
			{
				//实现led2-led5的流水点灯,延时间隔为delay()
				led5_off();
				led2_on();
		        delay();
				led2_off();
				led3_on();
				delay();
				led3_off();
				led4_on();	
				delay();
				led4_off();
				led5_on();
				delay();
			}
		}
		else if('c' == c)
		{
			send_adc(adc_read());
		}
		else
		{
			led2_off();
			led3_off();
			led4_off();
			led5_off();
			pwm_off();
		}
	}
	return 0;
}

2.QT串口

.pro工程文件添加串口模块

 .h头文件:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QtSerialPort/QSerialPort>//提供串口功能
#include <QtSerialPort/QSerialPortInfo>//系统串口访问功能
#include <QList>//链表模板类
#include <QPainter>//绘图类
#include <QPaintEvent>//绘图事件
#include <QImage>//图片类


namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    void paintEvent(QPaintEvent *);

private slots:

    void on_pushButton_clicked();

    void on_pushButton_2_clicked();

    void on_pushButton_3_clicked();

    void on_pushButton_4_clicked();

    void on_pushButton_5_clicked();

    void on_pushButton_6_clicked();

    void on_pushButton_8_clicked();

    void on_pushButton_7_clicked();

    void on_pushButton_9_clicked();

    void on_pushButton_10_clicked();

    void recvData();

private:
    Ui::MainWindow *ui;
    QSerialPort *serialport;//定义串口
    QImage  age;//定义图片对象
};

#endif // MAINWINDOW_H

mainwindow.cpp源文件:

#include "mainwindow.h"
#include "ui_mainwindow.h"


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    this->resize(800,500);//设置窗口大小
    this->setWindowTitle("                                                  串口控制助手");//设置窗口标题

    age=QImage(":/1.png");//图片对象初始化


#if 0
    //方法一:通过QSerialPortInfo查找可用串口
    foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
    {
         QSerialPort serial;
         serial.setPort(info);
         if(serial.open(QIODevice::ReadWrite))//打开串口
         {
             ui->comboBox->addItem(info.portName());
         }

    }
#endif
    //方法二:获得可用的串口
    QList <QSerialPortInfo> list;
    list = QSerialPortInfo::availablePorts ( );
    int i;
    for (i = 0; i < list.size () ; i++)
    {
         ui->comboBox->insertItem(i, list.at(i).portName());
    }


    serialport = new QSerialPort;//初始化串口
    serialport->setPortName("COM7");//设置串口名
    serialport->setBaudRate(115200);//设置波特率
    serialport->setDataBits(QSerialPort::Data8);//设置数据位(如8)
    serialport->setParity(QSerialPort::NoParity);//设置校验位(如0)
    serialport->setStopBits(QSerialPort::OneStop);//设置停止位(如1)
    serialport->setFlowControl(QSerialPort::NoFlowControl);//设置流控制(无流控制)

    if(serialport->open(QIODevice::ReadWrite))//打开串口
    {
        ui->label_2->setText("打开成功!");
    }
    else
    {
        ui->label_2->setText("打开失败!");
    }

    //信号和槽的关联
    connect(serialport, SIGNAL(readyRead()),this, SLOT(recvData()));
}
#if 1
void MainWindow::paintEvent(QPaintEvent *)
{
    QPainter pt(this);//在当前窗口绘画
    QImage age1=age.scaled(this->width(),this->height());//让图片自适应窗口大小
    pt.drawImage(0,0,age1,0,0,this->width(),this->height());//绘画
    update();//更新
}
#endif

MainWindow::~MainWindow()
{
    delete ui;
}


void MainWindow::on_pushButton_clicked()//点亮led2
{
    QByteArray data1 = "1";
    serialport->write(data1);
}

void MainWindow::on_pushButton_2_clicked()//点亮led3
{
    QByteArray data2 = "2";
    serialport->write(data2);
}

void MainWindow::on_pushButton_3_clicked()//点亮led4
{
    QByteArray data3 = "3";
    serialport->write(data3);
}

void MainWindow::on_pushButton_4_clicked()//点亮led5
{
    QByteArray data4 = "4";
    serialport->write(data4);
}

void MainWindow::on_pushButton_5_clicked()//开启蜂鸣器
{
    QByteArray data5 = "5";
    serialport->write(data5);
}

void MainWindow::on_pushButton_6_clicked()//关闭蜂鸣器
{
    QByteArray data6 = "6";
    serialport->write(data6);
}

void MainWindow::on_pushButton_8_clicked()//流水灯
{
    QByteArray data7 = "7";
    serialport->write(data7);
}

//关闭灯和蜂鸣器,若进入流水灯模式,只能等流水次数结束(10次)
void MainWindow::on_pushButton_7_clicked()
{
    QByteArray data8 = "8";
    serialport->write(data8);
}

void MainWindow::on_pushButton_9_clicked()//退出
{
    this->close();
}

void MainWindow::on_pushButton_10_clicked()//发送显示电阻值的信号---->'c'
{
    QByteArray data9 = "c";
    serialport->write(data9);
}

void MainWindow::recvData()//将电阻值显示在文本框
{
    QByteArray arr = serialport->readAll();//读取所有字节,存入字节数组中
    ui->lineEdit->setText(QString(arr));//将所有字节转换成字符串
}

界面文件:

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ARM------->第七天,ADC模块、Qt串口控制助手 的相关文章

  • linux系统下防火墙的使用以及开通端口

    1 基本使用 启动 xff1a systemctl start firewalld 关闭 xff1a systemctl stop firewalld 查看状态 xff1a systemctl status firewalld 开机禁用 x
  • 如何让自己电脑的cmd看起来更美观

    一 快速切换cmd字体颜色 xff08 暂时性 xff09 打开cmd输入color 02 二 永久性切换cmd文字颜色 打开cmd xff0c 在标题栏处鼠标右键选择属性 选择颜色 xff0c 切换自己喜欢的颜色 xff0c 点击确定即可
  • Android 音频开发——Radio Hal服务(三)

    nbsp nbsp nbsp nbsp nbsp nbsp nbsp 上一篇文章主要介绍了 BroadcastRadioService 的启动 这一篇我们介绍以下Radio Hal 层的服务 一 Radio模块的加载 nbsp nbsp n
  • java锁策略和synchronized锁机制

    一 常见的锁策略 1 乐观锁 vs 悲观锁 锁的实现者 xff0c 预测接下来的锁冲突概率大不大 xff0c 根据这个概率决定接下来该做什么 乐观锁 xff1a 预测冲突不大 xff0c 做的工作少一些 xff0c 效率更高一些 悲观锁 x
  • 【蓝桥杯java-学习笔记】单词中出现次数最多的字母和次数

    字符串 输入描述 输入一行包含一个单词 xff0c 单词只由小写英文字母组成 hello 输出描述 输出两行 xff0c 第一行包含一个英文字母 xff0c 表示单词中出现得最多的字母是哪 个 如果有多个字母出现的次数相等 xff0c 输出
  • 解决Use ‘docker scan‘ to run Snyk tests against images to find vulnerabilities and learn how to fix

    解决方法 在终端输入 xff1a sudo export DOCKER SCAN SUGGEST 61 false
  • 子集全排列组合数问题(带你轻松拿捏十一道OJ题)

    目录 一 子集 二 子集II 三 全排列 四 全排列II 五 字符全排列 六 字符串大小全排列 七 组合总和 八 组合总和II 九 组合总和III 十 组合总和IV 十一 递增子序列 一 子集 剑指 Offer II 079 所有子集 力扣
  • 操作系统笔记(本科必修课)

    1 操作系统概论 1 1 定义 操作系统是计算机系统中的一个系统软件 xff0c 是一些程序模块的集合 能以尽量有效 合理的方式组织和管理计算机的软 硬件资源 xff0c 合理的组织计算机的工作流程 xff0c 控制程序的执行并向用户提供各
  • linux远程登录

    ssh实验 1 两台机器 xff1a 第一台机器作为客户端 xff0c 第二台机器作为服务器 xff0c 在第一台使用rhce xff08 我用的是user1用户 xff09 用户免密登录第二台机器 2 禁止root用户远程登录和设置三个用
  • Spring的工作流程

    经过十多天的学习 xff0c 我的脑海中开始对spring框架有了基本的认识 首先我了解了spring框架的几个基本的常见的类 xff1a BeanFactory BeanDefinition BeanFactoryPostProfesso
  • 【爬虫】2.5 BeautifulSoup使用 CSS 语法查找元素

    1 使用 CSS 语法 BeautifulSoup 除了可以使用 find 与 find all 函数查找 HTML 文档树的结点元素外 xff0c 还可以采用 CSS 类似的语法来查询 xff0c 规则是 xff1a tag select
  • Spring Bean生命周期执行流程

    Spring Bean生命周期执行流程 2023 3 31 Spring 生命周期可以分为五个阶段 xff1a 创建前准备 创建实例 依赖注入 容器缓存 销毁实例 创建前准备阶段 这个阶段主要的作用是 xff1a Bean 在开始加载之前
  • github注册以及安装教程

    github注册以及安装教程 首先 xff0c 我们了解一下github gitHub 是一个面向开源及私有软件项目的托管平台 xff0c 因为只支持 git 作为唯一的版本库格式进行托管 xff0c 故名 gitHub github 于
  • Android 音频开发——Radio服务调用(四)

    nbsp nbsp nbsp nbsp nbsp nbsp nbsp 在 Android 音频开发 Radio服务 二 中介绍了 BroadcastRadioService 的启动流程 这里我们看一下 APP 如何一步步调用到 Radio
  • photoshop照片尺寸

    photoshop 一寸照片的尺寸是多少像素 常用的1寸照片大小是2 5 3 5cm的 但是 xff0c 像素多少要取决于用途是什么了 如果是冲洗的话分辨率一般用到300dpi xff0c 那就是295 412 如果是网上传看的话分辨率一般
  • ubuntu18.04安装Chrome

    简单5步安装Chrome 1 参考 xff1a https blog csdn net Diana Z article details 89474991 1 下载 sudo wget http www linuxidc com files
  • 2022牛客多校第一场A、C、D、G、I、J

    A Villages Landlines 题意 xff1a 在一条横轴上给定 n n n 个点横坐标 x s x s
  • MATLAB矩阵操作1——删除全0列和nan列

    MATLAB矩阵操作1 删除全0列和nan列 1 对全0列或行的删除2 对全为NAN列的删除3 对存在NAN列的删除 1 对全0列或行的删除 clear a 61 0 0 0 NaN 0 NaN NaN NaN 0 0 0 5 0 0 Na
  • Spring框架的知识点

    spring框架是 一个开源的容器性质的轻量级框架 主要有三大特点 xff1a 容器 IOC 控制反转 AOP 面向切面编程 DI 依赖注入 spring框架有哪些优点 xff08 三大优点 xff09 xff08 1 xff09 容器 x
  • 6.存储系统与辅存(cache的映射方式的各种问题解析)

    存储系统体系结构 6 1 存储系统6 2 程序访问的局部性原理6 3 主存地址到cache地址的映射6 4 cache的映像方式全相联映像方式直接映像方式组相联映像方式 6 1 存储系统 衡量存储器有三个指标 xff1a 容量 速度 价格

随机推荐

  • 127.0.0.1是什么地址

    背景情况 xff1a 将maven项目用eclipse中的tomcat启动 xff0c 登录web网页 xff0c 使用的IP为127 0 0 1 xff0c 思考为何用的这个网址 环境配置 xff1a eclipse2020 06 xff
  • SpringMVC工作流程(超级详细版)

    目录 一 xff1a springMVC常用基本组件 二 xff1a SpringMVC执行的流程 一 xff1a springMVC常用基本组件 1 DispatcherServlet 是SpringMVC框架了里面的前端控制器 作用 x
  • ViewModel的基本用法

    本来想弄个游戏开始的倒计时 xff0c 结果用普通方法没弄出来 xff0c 后来发现需要用LifeCirle可以对页面进行实时更新 于是找了相关教材 package com example myapplication import andr
  • 【新手教程】如何在Win11上制作一个模仿MacOS的桌面?

    起因是早上蹲坑的时候偶然间在小红书上刷到一篇文章 xff0c 看了下效果图感觉还不错 xff0c 所以按照文章作者的流程来了一遍 过程中也遇到了一些小问题 xff0c 正好放假了有空就写一篇文章记录一下 先放一下效果 xff1a 1 创建下
  • Android 音频开发——Hal服务版本(五)

    nbsp nbsp nbsp nbsp nbsp nbsp nbsp 上一篇内容到 BroadcastRadioService 调用 openTuner 开启广播时调用不通的 Hal 服务 这一篇来看一下 两个服务的代码 nbsp Broa
  • 问题解决:nginx执行命令后临时目录权限为nobody

    1 问题 执行了nginx t xff0c nginx s reload xff0c 重启了nginx xff0c 发现部分POST接口请求出现了500错误 xff0c 然后 xff0c 查看Nginx错误日志 xff0c 类似如下 xff
  • 【C语言】解决n!和求1!+2!+3!+......+n!问题;求前n项和c语言

    文章解决问题 xff1a 本文章使用C语言解决 n 求一个数的阶乘 xff1b 求 1 xff01 43 2 xff01 43 3 xff01 43 4 xff01 43 n 本篇文章使用 xff23 语言实现解决方案 xff0c 分别运用
  • 最近邻插值法(nearest_neighbor)

    1 原理与应用 最近邻插值法nearest neighbor是最简单的灰度值插值 也称作零阶插值 xff0c 就是令变换后像素的灰度值等于距它最近的输入像素的灰度值 最近邻插值法可应用于图像的缩放 xff0c 因为简单的变换与计算 xff0
  • pytroch、tensorflow对比学习—专栏介绍

    pytorch tensorflow Comparative study 前言 人工智能 机器学习 深度学习已经成为当下最热门的前端科技之一 这三者其实是子 子集的关系 随着技术发展和应用的深入 xff0c 深度学习越来越重要 xff0c
  • 用python将摄氏温度转为华氏温度

  • 用Python画菱形

  • python函数的定义与使用

    求最大值 xff0c 最小值 xff0c 平均数 xff0c 其他还在突破 判断BMI值
  • 用python求最大公约数

    在此列举了三种方法 xff0c 用简单的代码实现 辗转相除法 辗转相减法 枚举法 一定要注意空格
  • python序列常用函数

    x in ls 如果x是ls的元素 xff0c 则返回Ture xff0c 否则返回False x not ls 如果x 不是ls的元素 xff0c 则返回Ture xff0c 否则返回False ls 43 lt 连接序列ls和lt 43
  • python中可变序列常用函数

    ls i 61 x 原位修改 修改ls中指定下标索引对应元素的值为x ls i j 61 lt 用可迭代序列lt中的元素替换ls中 i j 1 范围内的元素 lt中的元素可以多余也可以少于ls中要被替换的元素个数 xff0c 此时原列表的长
  • Android Handler使用详解

    handler是android给我们提供用来更新UI的一套机制 xff0c 也是一套消息处理的机制 xff0c 我们可以发送消息 xff0c 也可以通过它处理消息 它最根本的目的就是解决多线程并发问题 xff0c 假设如果在一个Activi
  • 【shell】用shell脚本判断解析域名返回值是否为200

    bin bash for domain name in 96 cat mnt siteList txt 96 do result num 61 96 curl I s m 10 domain name grep HTTP awk 39 pr
  • Ubuntu实现ssh远程登陆

    目录 1 输入netstat查看是否有ssh的22号端口开放 2 输入 sudo apt get install openssh server 进行ssh服务的安装 3 安装完成后输入 service sshd start 启动ssh服务
  • 运用C++查找素数

    查找素数是在学习C C 43 43 中基本的问题 xff0c 主要是考察对循环的应用 xff0c 逻辑上并不是很难 对于常规的素数查找法 xff0c 解题步骤通常是 xff1a xff08 以查找100以内的素数为例 xff09 1 从2开
  • ARM------->第七天,ADC模块、Qt串口控制助手

    1 ADC 模拟量转换为数字量 模拟量 xff1a 连续的 比如 xff0c 温度 电压 电阻 高度 湿度 数字量 xff1a 离散的 在前几天的代码基础下 xff0c 添加adc c文件 adc h文件 xff0c 修改makefile工