📄 datlv5618.c
字号:
/*********************************************
1.功能: 本程序针对74165驱动芯片键盘驱动程序
2.I/O脚使用
3个
3.调试环境:12M晶振(51系列12时钟模式)
3.程序大小(ROM估计):
4.数据大小(RAM估计):
5.运行时间(与调用函数有关):
***********************************************/
//
//#define __DATLV5618_DEBUG__
#ifdef __DATLV5618_DEBUG__
#include<wywcomm.h>
#include<REGX52.H>
sbit io_DAdin = P2^6; // 串行数据,单向通信(输入)
sbit io_DAsclk = P2^5; // 串行通信时钟,下降沿有效
sbit io_DAcs = P2^7; // AD片选信号,低电平有效
//此模块调用其它模块的外部变量和函数的声明(此程序无)
// #include "E:\diansai2006\ts128647921chuank\src\ts128647921chuank.h"
// #include "E:\diansai2006\ADTLC2543\src\ADTLC2543.h"
#define DELAY1US_M _nop_()
#include "E:\diansai2006\chengxu\delaycomm\src\delaycomm.h"
#else
#include "system.h" //所有的项目用相同的系统头文件,但存放的路径不同,各自存放在对应的项目文件夹。
#endif
//此模块的宏定义(常数等)
//此模块必要的库函数包含(include)
#include<intrins.h>
//全局变量(静态或一般)的定义
//以下为函数定义
void v_DATLV5618A_f(uint8 x,uint16 shu)
//功能:进行DA转换并输出模拟信号
//说明:输入: x 表示:选择DA输出的通道,输入范围:1xx0、0xx0、0xx1、x1xx、x0xx、xx0x、xx1x(二进制)
// 0xx0(0)表示:写锁存器B 和 缓冲器(B), DAC B 单独输出。
// 1xx0(8)表示:写锁存器A 和 缓冲器(B)写锁存器B, DAC A 输出(B同时更新)。
// 0xx1(1)表示:缓冲器(B), DAC A 与 DAC B 都不输出。
// xx0x表示:正常操作
// xx1x表示:断电方式
// x0xx表示:快速模式
// x1xx表示:慢速模式
// 输入:shu 表示:一个无符号16位DA输出数。输入范围:0~4095。
//
//备注:1、当要使DAC A、DAC B同时有输出,则必须先将DAC B的数据写到缓冲器(B),
// 之后写锁存器A 和 缓冲器(B)写锁存器B,
// 即需要写两次:v_DATLV5618A_f(0xx1,DAC B)、v_DATLV5618A_f(1xx0,DAC A)。
// 2、1xx1表示:保留
//--------------------------------------------------------
{
uint8 i;
io_DAcs=0;
x<<=4; shu<<=4;
for(i=0;i<16;i++)
{
io_DAsclk = 1;
DELAY1US_M;
if(i < 4) {x <<= 1;io_DAdin = CY;}
else {shu <<= 1; io_DAdin=CY; }
DELAY1US_M;
io_DAsclk = 0;
DELAY1US_M;
DELAY1US_M;
}
io_DAsclk = 1;
io_DAcs=1;
v_DelayX10us_f(3);
}
#ifdef __DATLV5618_DEBUG__
void main(void)
{
uint16 i;
// const uint8 code xianshi[][16]={"DA/AD 程序测试:","基准电压为 2.77v","选择模拟通道: ","转换电压 "};
// v_LcdWriteCharIni_f();
// v_LcdWriteCharScreen_f(xianshi);
// v_LcdWriteChar_f(0x27,"10");
do{
for(i=0;i<2048;i++) {v_DATLV5618A_f(1,i);
v_DATLV5618A_f(8,i);
// v_LcdWriteNumber_f(0x37,3,u16_ReadADTLC2543_f(10));
v_DelayX10ms_f(10);}
for(i=2048;i>=1;i--) {v_DATLV5618A_f(1,i);
v_DATLV5618A_f(8,i);
// v_LcdWriteNumber_f(0x37,3,u16_ReadADTLC2543_f(10));
v_DelayX10ms_f(10);}
}while(1);
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -