标题:
TLC1543+TLC5615+51单片机实现可调亮度LED(仿真+程序)
[打印本页]
作者:
063589538
时间:
2018-12-13 02:11
标题:
TLC1543+TLC5615+51单片机实现可调亮度LED(仿真+程序)
内有5615 和1543模块仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
0.png
(34.45 KB, 下载次数: 20)
下载附件
2018-12-13 03:16 上传
0.png
(13.41 KB, 下载次数: 27)
下载附件
2018-12-13 03:17 上传
单片机源程序如下:
#include "inif.h"
#include <at89x52.h>
#include <absacc.h>
#include "LCD1602.H"
unsigned char data ad_result[16]={0};
unsigned char data dianliu_result[5]={0};
unsigned char bbb[] = {"CheckAD(TLC1543)" } ;//用于第二行的输出
float jizhun_AD=2.5; //AD的基准电压
unsigned int read1543(unsigned char chn1) ;
void da5615(unsigned int *p) ; //5615
/*******************************************DAC***************************************************/
float zh (float k)//浮点型!接收受小数的转换。
{
float DA;
DA=k*1024/5; //2.5v参考电压!
return DA;
}
void DA_Conver(unsigned int DAValue)
{
unsigned char i;
DAValue <<= 6; //原先是16位long数据:00000000+10位数据,<<6位后为(0000+10位数据+00)
CS_DA = 0;
SPI_CLK = 0; // 在以下12个时钟周期内,每当在上升沿的
// 数据被锁存,形成DA输出。
for(i = 0; i < 12; i++)
{
SPI_DATA = (bit)(DAValue & 0x8000); // 取出最高位---bit转换---强制单位bit转换,非零为1,0为0
SPI_CLK = 1;
DAValue <<= 1;
SPI_CLK = 0;
}
CS_DA = 1;
SPI_CLK = 0;
}
int keyscan(){
PORT_C = 0x00;
PORT_A = 0x0F;
delay(100);
if( PORT_C&0x0F <= 0x03 ){
delay(500);
if( PORT_C&0x0F <= 0x03 ){
return 1; //S1-S8按键按下就减
}
}
if( PORT_C&0x0F >= 0x04){
delay(500);
if( PORT_C&0x0F >= 0x04){
return -1; //S9-S16按键按下就加
}
}
return 0;
}
/************************************************************
函数描述:主函数
输入:
输出:
参数:
**************************************************************/
void main()
{
int move = 0;
unsigned int ad1 ;
long DAValue = 0 ;
unsigned int AD_ad=0,dianliu=0;
float AD_Data=0.0,scale = 10*5/1024;
PORT=0x03; //定义A B 为输出口 C口输入
lcd1602init();
lcd_clear();
while(1)
{
//AD_ad = read1543(1); //通道号
ad1 = read1543(1) / 2 ;
//AD_Data = ((float)AD_ad)*jizhun_AD/1024+0.0005; //0.0005 为修正量
// AD_Data = ((float)AD_ad)*jizhun_AD/1023 ;
AD_Data = ((float)ad1)*5/1024;
AD_ad = AD_Data*1000; // 0.000000 分解数据的时候先把小数变成整数 然后按照整数的方法分解数据4
//求电流 单位mA
dianliu = AD_Data/100*10000; //集电极电流等于电压除以100欧
dianliu_result[4] = (dianliu%10)+'0';
dianliu_result[1] = '.'; // 小数点
dianliu_result[3] = ((dianliu/10)%10)+'0';
dianliu_result[2] = ((dianliu/100)%10)+'0';
dianliu_result[0] = (dianliu/1000)+'0';
ad_result[4] = (AD_ad%10)+'0';
ad_result[3] = ((AD_ad/10)%10)+'0';
ad_result[2] = ((AD_ad/100)%10)+'0';
ad_result[1] = '.'; // 小数点
ad_result[0] = (AD_ad/1000)+'0';
lcd_string(ad_result,1); //在第一行输出AD转换的结果
wri(0x80 + 6 ) ; //写地址
wrd('V') ; //写数据
lcd_string(dianliu_result,2); //在第二行输出电流
wri(0xc0 + 6 ) ;
wrd('m') ;
wri(0xc0 + 7 ) ;
wrd('A') ;
move = keyscan;
ad1 += scale * move;
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
TLC1543 V4.rar
(156.21 KB, 下载次数: 83)
2018-12-13 02:09 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
初学者来
时间:
2019-6-23 07:53
这是Proteus几啊?
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1