当前位置: 首页 > news >正文

html网页制作网站外贸网站建站k

html网页制作网站,外贸网站建站k,网页设计 欣赏,电子书网站 自己做硬件 OLED PCF8591 /** OLED* VCC GND* SCL接P2^0* SDA接P2^1*//** PCF8591* VCC GND* SCL接P1^4* SDA接P1^5*//* 板子上按键 P1.3 *//* 单片机ADC输入引脚 P1.1 *//* 说明:将PCF8591的DAC输出接到单片机ADC输入引脚 P1.1,单片机采集电压并显示 */功能…

硬件

OLED

PCF8591


/** OLED* VCC GND* SCL接P2^0* SDA接P2^1*//** PCF8591* VCC GND* SCL接P1^4* SDA接P1^5*//* 板子上按键 P1.3 *//* 单片机ADC输入引脚 P1.1 *//* 说明:将PCF8591的DAC输出接到单片机ADC输入引脚 P1.1,单片机采集电压并显示 */

功能

这个程序是一个用于嵌入式系统的C语言程序,主要功能是控制一个数字模拟转换器(DAC)输出电压,并通过模数转换器(ADC)采集电压值,同时在OLED显示屏上实时显示这两组电压数据。具体步骤和功能如下:

  1. 初始化: 程序开始时,会停止看门狗定时器(WDT),并根据系统时钟校准常数进行时钟配置,确保系统稳定运行。接着初始化OLED显示屏,并在其上显示字符串"DAC:"和"ADC:"作为标题。

  2. DAC控制:

    • 程序设定一个变量dac_temp来控制输出电压,默认值为0.0。
    • 通过公式dac_value = dac_temp / 3.3 * 255将期望的电压值转换成DAC能识别的数字量,并通过I2C协议写入到地址0x90的设备的0x40寄存器中,实现电压输出控制。
    • 同时,将dac_temp对应的电压值格式化为字符串,并在OLED的第二行显示该电压值。
  3. ADC读取与处理:

    • 配置ADC10(10位模数转换器),开启中断并设置采样时间。
    • 设置P1.3作为按钮输入,启用内部上拉电阻。
    • 主循环中检测按钮状态,如果按钮被按下,则增加dac_temp的值(每次增加0.1V,范围限制在0到3V之间),并更新显示的DAC电压值及实际输出电压。
    • 在主循环中启动ADC采样与转换,进入低功耗模式等待转换完成中断。转换完成后,计算得到的实际电压值(0到3.3V范围内),将其扩大100倍后转换为整数,格式化为字符串,并在OLED的第四行显示ADC采集到的电压值。

综上所述,此程序实现了一个简单的电压控制系统,用户可以通过按钮调节DAC输出电压,并实时查看设置的电压值以及通过ADC采集到的电压反馈值,所有数据显示在连接的OLED显示屏上。

部分程序


int main( void )
{unsigned char   display[10], counta;float       volt;int     last_volt;int dac_temp    = 0.0;uchar   dac_value   = 0;WDTCTL = WDTPW + WDTHOLD;                                               /* Stop WDT */if ( CALBC1_8MHZ == 0xFF )                                              /* If calibration constant erased */{while ( 1 );                                                       /* do not load, trap CPU!! */}DCOCTL  = 0;                                                            /* Select lowest DCOx and MODx settings */BCSCTL1 = CALBC1_8MHZ;                                                  /* Set range */DCOCTL  = CALDCO_8MHZ;                                                  /* Set DCO step + modulation * / */OLED_Init();                                                            /* OLED初始化 */OLED_ShowString( 0, 0, "DAC:" );OLED_ShowString( 0, 4, "ADC:" );/* 控制DAC输出电压 */dac_value = dac_temp / 3.3 * 255;Single_WriteI2C( 0x90, 0x40, dac_value );                               /* 地址  寄存器  电压 *//* DAC输出电压的显示 */counta          = 0;display[counta++]   = dac_temp % 100 / 10 + '0';                    /* SHI位数字 */display[counta++]   = '.';display[counta++]   = dac_temp % 10 + '0';                          /* GE位数字 */display[counta++]   = 'V';display[counta++]   = 0;OLED_ShowString( 0, 2, display );                                       /* 在第2行显示DAC电压 *//* P1.1 ADC输入引脚 */ADC10CTL0   = ADC10SHT_2 + ADC10ON + ADC10IE;                       /* ADC10ON, interrupt enabled */P1DIR   &= ~BIT3;                                                       /*按键输入引脚寄存器设置 */P1REN   |= BIT3;P1OUT   |= BIT3;while ( 1 ){if ( (P1IN & BIT3) == 0 )                                       /*按键按下去了 */{while ( (P1IN & BIT3) == 0 );                                               /*按键按下去了条件一直成立 */dac_temp = dac_temp + 1;                                /* 加0.1V */if ( dac_temp > 30 )                                    /* 电压大于3V */{dac_temp = 0;}counta          = 0;display[counta++]   = dac_temp % 100 / 10 + '0';    /* SHI位数字 */display[counta++]   = '.';display[counta++]   = dac_temp % 10 + '0';          /* GE位数字 */display[counta++]   = 'V';display[counta++]   = 0;OLED_ShowString( 0, 2, display );                       /* 在第2行显示DAC电压 */dac_value = (float) dac_temp / 10 / 3.3 * 255;          /* 0到3.3转换到 0到255 传给模块 */Single_WriteI2C( 0x90, 0x40, dac_value );               /* 地址  寄存器  电压 */}ADC10CTL0 |= ENC + ADC10SC;                                     /* Sampling and conversion start */__bis_SR_register( CPUOFF + GIE );                              /* LPM0, ADC10_ISR will force exit */volt            = (float) ADC10MEM * 3.3 / 1025;        /* 得到电压 0到3.3V */last_volt       = (int) (volt * 100);                   /* 扩大100倍 */counta          = 0;display[counta++]   = last_volt / 100 + '0';                /* 百位数字 */display[counta++]   = '.';display[counta++]   = last_volt % 100 / 10 + '0';           /* 十位数字 */display[counta++]   = last_volt % 10 + '0';                 /* 个位数字 */display[counta++]   = 'V';display[counta++]   = 0;OLED_ShowString( 0, 6, display );                               /* 在第4行显示ADC采集到的电压 */}
}

全部程序

https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2

在这里插入图片描述

http://www.yayakq.cn/news/806880/

相关文章:

  • 如果一个网站没有备案摄影网站官网大全
  • 安卓手机做网站服务器网络品牌网站建设价格
  • 杭州企业网站建设方案顶尖手机网站建设
  • 模拟人生4做游戏下载网站企业网站关键词排名
  • 垂直网站怎么做1w粉丝接广告多少钱
  • 叫别人建个网站多少钱上海seo推广服务
  • 内容管理网站做网站简单的软件
  • 娱乐网站设计与实现做一个官方网站需要多少钱
  • 网站运行费用一般多少域名 去掉wordpress
  • 济宁做公司网站域名时间与网站优化
  • 深圳高端品牌网站设计网站建设职责要求
  • 网站正在升级建设中网络维护公司需要什么资质
  • 绵阳市建设工程质量监督站网站苏州市著名网站制作
  • 做企业网站服务器在国外东莞建设网站综合服务平台
  • 个人注册公司在哪个网站申请软件开发包含哪些内容
  • 抖音推广网站手机如何申请个人邮箱
  • 什么是网站建设策划书北京装修公司十大排名
  • 内蒙古自治区住房和城乡建设部网站深圳电商网站制作
  • 建设网站服务器怎么弄陕西个人证书查询网
  • 开发网站开票名称是什么原因济南门户网站建设
  • 信宜做网站赣州开网
  • 深圳福田园岭网站建设全网营销的公司
  • 济南网站开发wuliankjcentos怎么装WordPress
  • 网站转化下降原因温州网页制作哪家好
  • 做miui主题网站学网站开发学费多少
  • 上海专业的网站建设新安网站建设
  • 软文网站推荐上海的网站建设
  • 宁波seo推广外包公司北京网站优化什么价格
  • 咕果网给企业做网站的天网网站建设
  • 桥西区附近网站建设价格宜都市网站建设