基于STC12C5A60S2系列1T 8051单片机的数模芯片DAC0832实现数模转换应用

基于STC12C5A60S2系列1T 8051单片的数模芯片DAC0832实现数模转换应用

  • STC12C5A60S2系列1T 8051单片机管脚图
  • STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置
  • STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍
  • 数模芯片DAC0832介绍
    • 通过按键调节数模芯片DAC0832输出模拟量控制LED灯亮度

STC12C5A60S2系列1T 8051单片机管脚图

在这里插入图片描述在这里插入图片描述

STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置

在这里插入图片描述

STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍

在这里插入图片描述在这里插入图片描述

数模芯片DAC0832介绍

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

通过按键调节数模芯片DAC0832输出模拟量控制LED灯亮度

在这里插入图片描述在这里插入图片描述在这里插入图片描述

#include <stc12c5a60s2.h>
#define uchar unsigned char//自定义无符号字符型为uchar
#define uint unsigned int//自定义无符号整数型为uint 
#define DAC0832Data P0;//声明DAC0832数据变量为P0组端口
#define KeyPressDeshakeTime 10//自定义按键按下消抖时间为10ms
#define KeyLongPressDelayTime 500//自定义按键长按延时时间为500ms
#define KeyLongPressIntervalChangeTime 25//自定义按键长按间隔变化时间为25ms
uchar AddKeyLockFlag;//声明增加按键锁定标志位变量
uchar DecKeyLockFlag;//声明减少按键锁定标志位变量
uchar KeyNumber = 0;//定义按键键值为0
uchar AddKeyLongPressAddIntervalTime;//声明增加按键长按连增间隔时间变量
uchar DecKeyLongPressDecIntervalTime;//声明减少按键长按连减间隔时间变量
uchar NumberValue;//声明数字量变量
uint AddKeyPressDelayTime;//声明增加按键按下延时时间变量
uint DecKeyPressDelayTime;//声明减少按键按下延时时间变量
//uint Timer0TimeCount;//声明定时器0定时计数变量
sbit AddKey = P2^0;//位定义增加按键为单片机P2.0引脚
sbit DecKey = P2^1;//位定义减少按键为单片机P2.1引脚
sbit DAC0832WR = P3^6;//位定义DAC0832读写变量为P3.6端口
sbit DAC0832CS = P2^7;//位定义DAC0832片选变量为P2.6端口void DAC0832Change(uchar Data)//DAC0832转化函数
{DAC0832CS = 0;//DAC0832片选端口拉低电平DAC0832WR = 0;//DAC0832读写端口拉低电平DAC0832Data = Data;//数据变量包含的数据赋给DAC0832数据变量DAC0832CS = 1;//DAC0832片选端口拉高电平DAC0832WR = 1;//DAC0832读写端口拉高电平}void KeyScan()//按键扫描函数 该函数放在定时器定时1ms的中断函数中扫描
{if(AddKey)//如果增加按键没按下或弹起{AddKeyLockFlag = 0;//增加按键锁定标志位清0AddKeyPressDelayTime = 0;//增加按键按下延时时间清0}   else if(!AddKeyLockFlag)//如果增加按键锁定标志位置1 即增加按键按下{AddKeyPressDelayTime++;//增加按键按下延时时间自加if(AddKeyPressDelayTime > KeyPressDeshakeTime)//如果增加按键按下延时时间大于按键按下消抖时间{AddKeyPressDelayTime = 0;//增加按键按下延时时间清0KeyNumber = 1;//按键键值置1 此处是单击增加 可赋给swicth()语句中的变量来对数值单击增加AddKeyLockFlag = 1;//增加按键锁定标志位置1}}else if(AddKeyPressDelayTime < KeyLongPressDelayTime)//如果增加按键按下延时时间小于按键长按延时时间{AddKeyPressDelayTime++;//增加按键按下延时时间自加}else//如果增加按键按下延时时间大于按键长按延时时间{AddKeyLongPressAddIntervalTime++;//增加按键长按连增间隔时间自加if(AddKeyLongPressAddIntervalTime > KeyLongPressIntervalChangeTime)//如果增加按键长按连增间隔时间大于按键长按间隔变化时间{AddKeyLongPressAddIntervalTime = 0;//增加按键长按连增间隔时间清0KeyNumber = 1;//按键键值置1 此处是连击增加 可赋给swicth()语句中的变量来对数值连击增加}}   if(DecKey)//如果减少按键没按下或弹起{DecKeyLockFlag = 0;//减少按键锁定标志位清0DecKeyPressDelayTime = 0;//减少按键按下延时时间清0}   else if(!DecKeyLockFlag)//如果减少按键锁定标志位置1 即减少按键按下{DecKeyPressDelayTime++;//减少按键按下延时时间自加if(DecKeyPressDelayTime > KeyPressDeshakeTime)//如果减少按键按下延时时间大于按键按下消抖时间{DecKeyPressDelayTime = 0;//减少按键按下延时时间清0KeyNumber = 2;//按键键值置2 此处是单击减少 可赋给swicth()语句中的变量来对数值单击减少DecKeyLockFlag = 1;//减少按键锁定标志位置1}}else if(DecKeyPressDelayTime < KeyLongPressDelayTime)//如果减少按键按下延时时间小于按键长按延时时间{DecKeyPressDelayTime++;//减少按键按下延时时间自加}else//如果减少按键按下延时时间大于按键长按延时时间{DecKeyLongPressDecIntervalTime++;//减少按键长按连减间隔时间自加if(DecKeyLongPressDecIntervalTime > KeyLongPressIntervalChangeTime)//如果减少按键长按连减间隔时间大于按键长按间隔变化时间{DecKeyLongPressDecIntervalTime = 0;//减少按键长按连减间隔时间清0KeyNumber = 2;//按键键值置2 此处是连击减少 可赋给swicth()语句中的变量来对数值连击减少}}}void NumberValueSet()//数字量数值设置函数
{switch(KeyNumber)//按键类型筛选位{case 1 ://增加按键单击、长按触发位NumberValue++;//数字量数值自加if(NumberValue > 255)//如果数字量数值大于255 为啥数字量数值变量NumberValue取255来比较?由于数字量数值变量NumberValue要计入DAC0832转换器 而DAC0832转换器是八位寄存器 最大只能计入255 因此数字量数值变量NumberValue取255来比较{NumberValue = 255;//数字量数值等于255}KeyNumber = 0;//按键键值清0break;//跳出case 2 ://减少按键单击、长按触发位NumberValue--;//数字量数值自减if(NumberValue < 0)//如果数字量数值小于0{NumberValue = 0;//数字量数值清0}KeyNumber = 0;//按键键值清0break;//跳出default:break;//跳出}}
/*****关于8051系列单片机定时器溢出率和定时器初值(定时计数初值)之间计算的知识点*****/ 
/****
一、定时器溢出率计算公式
1、定时器溢出率:定时器每秒溢出的次数
2、定时器溢出率计算公式表定时方式            分频方式                      公式
方式1:16位定时器  12分频(即12T 默认值)   Ft=晶振频率/12/(65536-定时器初值)
方式2:8位定时器   12分频(即12T 默认值)   Ft=晶振频率/12/(256-定时器初值)
方式1:16位定时器      1分频(即1T)       Ft=晶振频率/1/(65536-定时器初值)
方式2:8位定时器       1分频(即1T)       Ft=晶振频率/1/(256-定时器初值)
二、定时器初值(定时计数初值)计算公式定时方式            分频方式                      公式
方式1:16位定时器   12分频(即12T 默认值)  定时器初值(定时计数)=65536-晶振频率/12*定时时间
方式2:8位定时器    12分频(即12T 默认值)  定时器初值(定时计数)=256-晶振频率/12*定时时间
方式1:16位定时器       1分频(即1T)      定时器初值(定时计数)=65536-晶振频率*定时时间
方式2:8位定时器        1分频(即1T)      定时器初值(定时计数)=256-晶振频率*定时时间
****/void Timer0Init()//定时器0的16位定时模式1用12分频定时1ms初始化函数 晶振为12MHz
{AUXR &= 0x7f;//设定定时器/计数器模式为12TTMOD &= 0xf0;//设定定时器/计数器工作模式清0TMOD |= 0x01;//设定定时器/计数器为定时器 工作模式为16位定时器0模式1TH0 = 0xfc;//设定定时器0高8位初值 TL0 = 0x18;//设定定时器0低8位初值TF0 = 0;//定时器0溢出中断标志位清0ET0 = 1;//打开定时器中断开关EA = 1;//打开定时器中断总开关TR0 = 1//打开定时器0开关} void Timer0() interrupt 1//定时器0的16位定时模式1用12分频定时1ms中断函数 晶振为12MHz
{TR0 = 0;//关定时器0开关/****Timer0TimeCount++;//定时器0定时计数自加if(Timer0TimeCount >= 10)//10ms时间到{Timer0TimeCount = 0;//定时器0定时计数清0DAC0832Change(NumberValue);//DAC0832转化函数 }****/KeyScan();//按键扫描函数TH0 = 0xfc;//设定定时器0高8位初值TL0 = 0x18;//设定定时器0低8位初值TR0 = 1;//开定时器0开关} void main()//主函数
{Timer0Init();//定时器0的16位定时模式1用12分频定时1ms初始化函数 晶振为12MHzNumberValueSet();//数字量数值设置函数while(1)//主循环{DAC0832Change(NumberValue);//DAC0832转化函数 }}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/144056.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序微信用户授权登录怎么在小程序上和钉钉相关联

要在微信小程序上实现微信用户授权登录并与钉钉相关联&#xff0c;你需要执行以下步骤&#xff1a; 钉钉开放平台注册应用&#xff1a;在钉钉开放平台上注册一个应用&#xff0c;获取到相应的AppID和AppSecret。 微信小程序授权登录&#xff1a;在微信小程序中使用wx.login接口…

WPF下实现拖动任意地方都可以拖动窗口

首先在xaml中添加事件 <Window PreviewMouseLeftButtonDown"Window_PreviewMouseLeftButtonDown"PreviewMouseMove"Window_PreviewMouseMove"PreviewMouseLeftButtonUp"Window_PreviewMouseLeftButtonUp"/>然后脚本输入 Point _pressedP…

【Spring进阶系列丨第二篇】Spring中的两大核心技术IoC(控制反转)与DI(依赖注入)

前言 我们都知道Spring 框架主要的优势是在 简化开发 和 框架整合 上&#xff0c;至于如何实现就是我们要学习Spring 框架的主要内容&#xff0c;今天我们就来一起学习Spring中的两大核心技术IoC&#xff08;控制反转&#xff09;与DI&#xff08;依赖注入&#xff09;。 文章目…

【数据结构】别跟我讲你不会冒泡排序

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前正在学习c和算法 ✈️专栏&#xff1a;数据结构 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章有啥瑕疵 希望大佬指点一二 如果文章对你有帮助…

【6】Spring Boot 3 集成组件:knift4j+springdoc+swagger3

目录 【6】Spring Boot 3 集成组件&#xff1a;knift4jspringdocswagger3OpenApi规范SpringFox Swagger3SpringFox工具&#xff08;不推荐&#xff09; Springdoc&#xff08;推荐&#xff09;从SpringFox迁移引入依赖配置jAVA Config 配置扩展配置&#xff1a;spring securit…

NumLevels

NumLevels&#xff1a;输入参数&#xff0c;最大的金字塔层数。默认auto&#xff0c;范围【0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, auto】。 AngleStart&#xff1a;输入参数&#xff0c;输入匹配时的起始角度。默认-0.39&#xff0c;建议值【 -3.14, -1.57, -0.79, -0.39, -0.20,…

CodeWhisperer 使用经验分享

今天给大家分享一下 Amazon CodeWhisperer 编程工具&#xff08;免费哦&#xff09;&#xff0c;使用这个软件后我的编码质量提升不少&#xff0c;给大家分享一下我的经验。希望大家支持哦。 Amazon CodeWhisperer 是亚⻢逊出品的一款基于机器学习的 AI 编程助手&#xff0c;可…

Java 开发常用的 Linux 命令知识积累

写在前面 虽然平时大部分工作都是和Java相关的开发, 但是每天都会接触Linux系统, 尤其是使用了Mac之后, 每天都是工作在黑色背景的命令行环境中. 自己记忆力不好, 很多有用的Linux命令不能很好的记忆, 现在逐渐总结一下, 以便后续查看. 基本操作 Linux关机,重启 # 关机 shu…

设计模式——建造者模式(Builder Pattern)+ Spring相关源码

文章目录 一、建造者模式定义二、例子2.1 自定义例子2.2 JDK源码——DateTimeFormatterBuilder2.3 Spring源码——BeanDefinitionBuilder 三、其他设计模式 一、建造者模式定义 类型&#xff1a; 创建型模式 介绍&#xff1a; 使用Builder类将多个简单的对象一步一步构建成一个…

C语言--每日五道练习题-- Day15

第一题 1、以下程序段的输出结果是&#xff08; &#xff09; #include<stdio.h> int main() {char s[] "\\123456\123456\t";printf("%d\n", strlen(s));return 0; } A: 12 B: 13 C: 16 D: 以上都不对 答案及解析 A 本题考查的是转义字符 \ 占…

uniapp 实现微信小程序手机号一键登录

app 和 h5 手机号一键登录&#xff0c;参考文档&#xff1a;uni-app官网 以下是uniapp 实现微信小程序手机号一键登录 1、布局 <template><view class"mainContent"><image class"closeImg" click"onCloseClick"src"quic…

上位机模块之通用重写相机类

在常用的视觉上位机中&#xff0c;我们通常会使用单个上位机匹配多个相机或者多品牌相机&#xff0c;所以在此记录一个可重写的通用相机类&#xff0c;用于后续长期维护开发。 先上代码。 using HalconDotNet; using System.Collections.Generic;namespace WeldingInspection.M…

SQL学习(CTFhub)整数型注入,字符型注入,报错注入 -----手工注入+ sqlmap注入

目录 整数型注入 手工注入 为什么要将1设置为-1呢&#xff1f; sqlmap注入 sqlmap注入步骤&#xff1a; 字符型注入 手工注入 sqlmap注入 报错注入 手工注入 sqlmap注入 整数型注入 手工注入 先输入1 接着尝试2&#xff0c;3&#xff0c;2有回显&#xff0c;而3没有回显…

MySQL中外键的使用及外键约束策略

一、外键约束的概念 外键约束&#xff08;FOREIGN KEY,缩写FK是数据库设计的一个概念&#xff0c;它确保在两个表之间的关系保持数据的一致性和完整性。 外键是指表中的某个字段的依赖于另一张表中某个字段的值&#xff0c;而被依赖的字段必须具有主键约束或者唯一约束&#…

Linux下docker安装mysql8.0

下载mysql8.0docker镜像 docker pull mysql:8.0 查看下载的docker镜像 docker images创建挂载目录 mkdir -p /data/mysql/conf mkdir -p /data/mysql/data mkdir -p /data/mysql/logs运行 docker run -p 3306:3306 --name mysql --restartalways --privilegedtrue \ -v /da…

解决:java: 错误: 不支持发行版本 5 最有效方法

报错信息如图&#xff1a; 直接上终极方法&#xff1a; 修改配置文件 如图找到settings.xml文件 在标签中间插入如下代码&#xff08;jdk更改为自己电脑上的版本&#xff09; <profile><id>development</id><activation><jdk>11</jdk><…

计算机毕业设计项目选题推荐(免费领源码)java+ssm+mysql大学生本科毕业资格审核系统的设计与实现67038

摘 要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对大学生本科毕业资格审核系统等问题&#…

如何优化谷歌商店里应用的评分评论1

低的评分和评论会引起的连锁反应&#xff0c;会对搜索和浏览可见性产生负面影响&#xff0c;同时拖累我们围绕应用商店优化所做的一切。所以解决负面评论的问题并提高应用的评分&#xff0c;对于提高应用商店的知名度至关重要。 1、分析应用评论。 我们需要分析应用程序当前获…

css 灰质彩色的边框

border: 4px solid transparent; background-color:#fff; background-clip: padding-box,border-box; background-origin:padding-box, border-box; background-image: linear-gradient(90deg,#F5F6FA,#F5F6FA 42%,#F5F6FA),linear-gradient(151deg,#33e9bf,#c7e58a,#b1e8cc);

DBA_IND_STATISTICS 字段含义

功能 展示数据库中所有索引的优化器统计信息。 字段说明 参考&#xff1a;https://www.oceanbase.com/docs/enterprise-oceanbase-database-cn-10000000000885743