基于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,一经查实,立即删除!

相关文章

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;可…

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

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

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;而被依赖的字段必须具有主键约束或者唯一约束&#…

解决: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、分析应用评论。 我们需要分析应用程序当前获…

DBA_IND_STATISTICS 字段含义

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

元数据管理,数字化时代企业的基础建设

随着新一代信息化、数字化技术的应用&#xff0c;众多领域通过科技革命和产业革命实现了深度化的数字改造&#xff0c;进入到以数据为核心驱动力的&#xff0c;全新的数据处理时代&#xff0c;并通过业务系统、商业智能BI等数字化技术和应用实现了数据价值&#xff0c;从数字经…

力扣刷题篇之数与位2

系列文章目录 目录 系列文章目录 前言 数值计算 总结 前言 本系列是个人力扣刷题汇总&#xff0c;本文是数与位。刷题顺序按照[力扣刷题攻略] Re&#xff1a;从零开始的力扣刷题生活 - 力扣&#xff08;LeetCode&#xff09; 数值计算 415. 字符串相加 - 力扣&#xff08;…

石原子科技亮相2023成都市信息领域新产品发布会

2023年11月13日至15日&#xff0c;由成都市互联网信息办公室、四川天府新区管委会、成都市经信局市新经济委、成都市农业农村局指导的以“信息创造价值 创新引领未来”为主题的成都市信息领域新产品发布会在科创生态岛1号馆举行。围绕人工智能、区块链、数字化绿色化、数字乡村…

iOS性能优化

了解屏幕成像的原理。 有一个电子枪然后在很多横轴方向上 发射电子&#xff0c;不同横轴的电子枪根据显示器中的硬件时钟产生一系列的定时信号&#xff0c;以此来让电子以不同的时间发射出去 这些电子一瞬间的运动形成了一帧动画。 CPU优化&#xff1a; 1.文本计算优化 如果一…

Unity Meta Quest 一体机开发(六):HandGrabInteractor 和 HandGrabInteractable 知识点

文章目录 &#x1f4d5;教程说明&#x1f4d5;HandGrabInteractor⭐HandGrabAPI⭐HandWristPoint⭐GripPoint⭐PinchPoint⭐PinchArea⭐HandGrabVisual⭐HandGrabGlow &#x1f4d5;HandGrabInteractable⭐Support Grab Type⭐Pinch Grab Rules 和 Palm Grab Rules⭐Unselect M…

BMS系统项目

1、通过电压监测是否冲满&#xff0c;通过电压可以监测是否放完电 电池得参数 单体过压&#xff08;充满电&#xff09; 过压恢复&#xff08;百分之90多&#xff09; 欠压保护&#xff08;百分之几得电&#xff0c;快关机了&#xff09; 欠压恢复&#xff08;就是欠压之上…

C#中.NET 6.0 Windows窗体应用通过EF访问数据库并对数据库追加、删除记录

目录 一、应用程序设计 二、应用程序源码 三、生成效果 前文作者发布了在.NET 6.0 控制台应用中通过EF访问已有数据库&#xff0c;事实上&#xff0c;在.NET 6.0 Windows窗体应用中通过EF访问已有数据库也是一样的。操作方法基本一样&#xff0c;数据库EF模型和上下文都是自…