系统功能
使用PCF8591对C8051F进行AD转换。
硬件设计
使用PCF8591对C8051F进行AD转换电路原理图
软件设计
下面部分从TXT拷出,拷到网页,代码部分缺省了很多空格,比较凌乱,请谅解!
I2C(SMBus)详细程序请查看C8051F I2C(SMBus)程序。
//目标系统: 基于C8051F单片机
//应用软件: Silicon IDE / Keil
/*01010101010101010101010101010101010101010101010101010101010101010101
----------------------------------------------------------------------
实验内容:
利用PCF8591进行AD数据转换,转换的值返回到P2口中,P2口与LED相连,观测LED灯是否正确显示
----------------------------------------------------------------------
硬件连接:
将P2口与8位LED指示灯相连。
在PCF8591的AIN0端口接入一个10K的电位器
DVK501(PCF8591PrlPort) F320 EX
VCC --------- VCC
GND --------- GND
SDA --------- P1.0
SCL --------- P1.1
----------------------------------------------------------------------
注意事项:
(1)若有加载库程序,请将光盘根目录下的“library”下的“C8051F”文件夹拷到D盘
(2)请详细阅读:光盘根目录下的“说明书首页.htm”里的相应产品说明
----------------------------------------------------------------------
10101010101010101010101010101010101010101010101010101010101010101010*/
#define _DVK501_F320_EX_
#include #include <../../../../library/C8051F/ws_clock.h> #include <../../../../library/C8051F/ws_delay.h> #include <../../../../library/C8051F/ws_iic_port.h> #include <../../../../library/C8051F/ws_pcf8591.h> void main(void) { uchar *pGetDat,tmp = 0; PCA0MD &= ~0x40; // Clear watchdog timer enable clock_external(); // Set oscillator in external,the clock is 12M delay_ms(100); Check_SDA(); XBR1 = 0x40; // Enable crossbar and weak pull-ups SMBus_Init(); Enb_Interrupt(); while(1) { PCF8591_getAD(MODE0,CHNL0,pGetDat); if(*pGetDat != tmp) { showLine(11,1,lcd_buffer,"0x%x2",*pGetDat); refreshLCD(lcd_buffer); tmp = *pGetDat; P2 = tmp; } delay_ms(100); } } #define MODE0 0x00 //Channel0 = AIN0; //Channel1 = AIN1; //Channel2 = AIN2; //Channel3 = AIN3; #define MODE1 0x10 //Channel0 = AIN3-AIN0; //Channel1 = AIN3-AIN1 //Channel2 = AIN3-AIN2; #define MODE2 0x20 //Channel0 = AIN0; //Channel1 = AIN1; //Channel2 = AIN3-AIN2; #define MODE3 0x30 //Channel0 = AIN1-AIN0; //Channel1 = AIN3-AIN2; #define CHNL0 0 //Using Channel0 #define CHNL1 1 //Using Channel1 #define CHNL2 2 //Using Channel2 #define CHNL3 3 //Using Channel3 #define DAouputEn 0x40 //0x50 or 0x60 or 0x70 is also ok! void PCF8591_getAD(uchar mode,uchar chan,uchar *ADC) { SMBus_Write(0x90,mode|chan,0,1); SMBus_Read(0x91,ADC,1); } void PCF8591_setDA(uchar val) { SMBus_Write(0x90,DAouputEn,val,2); } 系统调试 调电位器上的旋钮,观察每次调完后LED灯的现象。
上一篇:使用C8051F驱动PCF8563时钟芯片
下一篇:使用AT24Cxx扩展C8051F EEPROM
推荐阅读最新更新时间:2024-11-10 19:11
设计资源 培训 开发板 精华推荐
- LT3484 的典型应用 - 闪光灯电容器充电器
- AM2G-2405SZ 5V 2 瓦 DC/DC 转换器的典型应用
- ADG708BRUZ模拟开关模块
- NCV663 100 mA CMOS Low Iq低压降稳压器的典型应用
- 用于 USB Dongle 应用的 USB 收发器
- 使用 Microchip Technology 的 LM285BEOA-2.5 的参考设计
- 使用 MaxLinear, Inc 的 AS2815AR-2.5 的参考设计
- esplay-esp32-s3
- LT3510 的典型应用 - 单片双路跟踪 2A 降压型开关稳压器
- DC827A-B,使用 LTC2804、1.8V 至 5.5V RS-232 双收发器的演示板