求程序代码:51单片机8位动态数码管数字电压显示,经过mcp3001串行A/D转换后,利用8位动态数码管显示外部电压的数值。要求精确到小数点后2位。外部电压改变的时候,显示的电压数值也要随之改变,注意,最后一个字符为大写的字符“U”

时间: 2024-03-01 09:56:20 浏览: 17
以下是基于51单片机的8位动态数码管数字电压显示程序代码,使用了MCP3001串行A/D转换芯片: ```c #include <reg51.h> #define uchar unsigned char #define uint unsigned int sbit CS = P1^4; //定义片选引脚 uchar code LedChar[] = { //数码管字符表 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71 }; void delay(uint t) { //延时函数 uint i, j; for(i=0; i<t; i++) { for(j=0; j<120; j++); } } uchar SpiWrite(uchar dat) { //SPI写函数 uchar i, rdat; for(i=0; i<8; i++) { P1 &= ~0x08; //SCK=0 if(dat & 0x80) P1 |= 0x02; //MOSI=1 else P1 &= ~0x02; //MOSI=0 P1 |= 0x08; //SCK=1 dat <<= 1; } P1 &= ~0x08; //SCK=0 rdat = P1 & 0x01; //MISO return rdat; } uint AdcRead(uchar chn) { //ADC读函数 uchar i; uint rdat = 0; CS = 0; //片选 SpiWrite(0x01); //起始字节 SpiWrite((chn<<4) | 0x80); //通道号 for(i=0; i<3; i++) { rdat <<= 8; rdat |= SpiWrite(0x00); //读取数据 } CS = 1; //取消片选 return rdat & 0x3ff; //取低10位 } void DispNum(uint num, uchar dp) { //数码管显示函数 uchar i, j, k, buf[8]; for(i=0; i<8; i++) { //转换成字符 buf[i] = LedChar[num % 10]; if(i == dp) buf[i] |= 0x80; //小数点 num /= 10; } for(i=0; i<8; i++) { //循环扫描 P0 = 0xff; //消影 for(j=0; j<8; j++) { k = (i+j) & 0x07; //计算位序 P0 = buf[k]; //显示字符 P2 = ~(1<<k); //位选 delay(1); //短延时 } } } void main() { uint adval; while(1) { adval = AdcRead(0); //读取ADC值 DispNum(adval, 2); //显示ADC值 delay(10); //短延时 } } ``` 注意,上述程序中的`AdcRead`函数使用了MCP3001芯片进行串行A/D转换,通过调用该函数读取外部电压的模拟值,再将其转换成数码管字符进行显示。其中,`DispNum`函数用于将数字转换成数码管字符并进行循环扫描显示,其中第二个参数`dp`用于指定小数点的位置。 最后一个字符为大写的字符“U”可以通过添加一个额外的数码管进行显示,或者在数码管的字符表中添加一个表示“U”的字符。

相关推荐

最新推荐

recommend-type

基于stm8s和MCP3421毫欧表原理图

基于stm8s003和 mcp3421 毫欧表原理图,使用12864进行显示,经过测试可以正常使用,有需要的可以参考,
recommend-type

PIC24HJ单片机自学笔记-带EEPROM和I2C的12位DAC芯片MCP4726

MCP4726是一个12位带EEPROM和I2C接口的串行DAC,其小封装很适合在布局紧凑的应用方案上。VREF或者VDD可以作为参考电压,如果是用VDD,则VDD连接内部参考电压,如果选择VREF,可以选择增益。内部带EEPROM,在掉电情况...
recommend-type

滤波参考P32-MCP25XXFD-FRM,-CAN-FD-Controller-Module-DS20005678D.pdf

MCP2517数据手册。Microchip MCP2517FD外部CAN FD控制器是一款外形小巧、经济高效的外部CAN FD控制器,可通过可用的SPI接口轻松添加到微控制器中。可将CAN FD通道轻松添加到缺少CAN FD外设或没有足够CAN FD通道的微...
recommend-type

MCP2515多路CAN总线接口电路设计图

目前主流的CAN协议控制器一般采用I/O总线(SJA1000等)或SPI接口(MCP2515等)与MCU进行通信。由于本设计采用PC /104总线扩展卡的方式来扩展多个RS232和RS485接口,没有多余的I/O片选线可用,因此最终选用9200的SPI...
recommend-type

MCP4725中文数据手册.pdf

MCP4725的中文数据手册,这是一款通用性很强的DAC转换芯片,工作电压2.7V~5.5V。
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

用matlab绘制高斯色噪声情况下的频率估计CRLB,其中w(n)是零均值高斯色噪声,w(n)=0.8*w(n-1)+e(n),e(n)服从零均值方差为se的高斯分布

以下是用matlab绘制高斯色噪声情况下频率估计CRLB的代码: ```matlab % 参数设置 N = 100; % 信号长度 se = 0.5; % 噪声方差 w = zeros(N,1); % 高斯色噪声 w(1) = randn(1)*sqrt(se); for n = 2:N w(n) = 0.8*w(n-1) + randn(1)*sqrt(se); end % 计算频率估计CRLB fs = 1; % 采样频率 df = 0.01; % 频率分辨率 f = 0:df:fs/2; % 频率范围 M = length(f); CRLB = zeros(M,1); for
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。