51单片机PCF8591-AD-DA转换,中断实现切换。


#include <reg51.h>
#define uchar unsigned char
#define uint unsigned intsbit SCL=P2^1;    //串行时钟输入端
sbit SDA=P2^0;     //串行数据输入端
sbit HC595_RCLK  = P2^5;
sbit HC595_SRCLK = P2^6;
sbit HC595_SER   = P2^7;uchar flag,n,a,b,c,yi,er,san,si,wu,liu,qi,ba;
uchar code shuma_duan[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x40,0x00};
void display();
void delay()    //延时4-5个微秒
{;;}
//
void Delay_Ms(uint z)
{uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);
}
//
void Send_595(uchar dat)
{       uchar   i;for(i=0; i<8; i++){if(dat & 0x80)HC595_SER = 1;else            HC595_SER = 0;HC595_SRCLK = 0;HC595_SRCLK = 1;dat = dat << 1;}
}
//
void start()//开始信号
{SDA=1;delay();SCL=1;delay();SDA=0;delay();
}
//
void stop() //停止信号
{SDA=0;delay();SCL=1;delay();SDA=1;delay();
}
//
void respons()//应答    相当于一个智能的延时函数
{uchar i;SCL=1;delay();while((SDA==1)&&(i<250))i++;SCL=0;delay();
}
//
void init() //初始化
{SDA=1;delay();SCL=1;delay();
}uchar read_byte()
{uchar i,k;SCL=0;delay();SDA=1;delay();for(i=0;i<8;i++){SCL=1;delay();k=(k<<1)|SDA;//先左移一位,再在最低位接受当前位SCL=0;delay();}return k;
}
//
void write_byte(uchar date) //写一字节数据
{uchar i,temp;temp=date;for(i=0;i<8;i++){temp=temp<<1;    //左移一位 移出的一位在CY中SCL=0;         //只有在scl=0时sda能变化值delay();SDA=CY;delay();SCL=1;delay();SCL=0;delay();       }   SDA=1;delay();
}
//
void write_process(uchar kongzhizi,uchar date)
{start();write_byte(0x90);  //1010 0000    前四位固定 接下来三位全部被接地了 所以都是0 最后一位是写 所以为低电平respons();write_byte(kongzhizi);respons();write_byte(date);respons();stop();
}
//
uchar read_process(uchar kongzhizi)
{uchar date;start();write_byte(0x90);respons();write_byte(kongzhizi);respons();start();write_byte(0x91);     //把最后一位变成1,读respons();date = read_byte();stop();return date;
}
//
void main()
{flag = 0;EA = 1;EX0 = 1;IT0 = 1;while(1){//A/D转换//通过AD转换,把数值显示。if(flag == 0){init();n = read_process(0x00);      //rb2滑动变阻器
//          n = read_process(0x01);      //光敏电阻  光度越强 数值越小
//          n = read_process(0x02);      //热敏电阻  温度越高 数值越小
//          n = read_process(0x03);      //接地为0yi=n/100;er=n%100/10;san=n%10;si=11;wu=11;liu=11;qi=11;ba=11;display();}//D/A转换//慢慢变亮后再慢慢变暗,如此循环。if(flag == 1){if(a <= 250){a++;c = a;if(a == 251){b = 250;}}if(b >= 2){b--;c = b;if(b == 1){a = 0;}}Delay_Ms(5);write_process(0x40,c);}}
}
//
void exter() interrupt 0  //控制D/A转换还是A/D转换。
{flag++;if(flag == 2){flag = 0;}
}
//
void display()
{Send_595(0xfe); Send_595(shuma_duan[yi]);HC595_RCLK = 0;HC595_RCLK = 1;Send_595(0xfd); Send_595(shuma_duan[er]);HC595_RCLK = 0;HC595_RCLK = 1;Send_595(0xfb); Send_595(shuma_duan[san]);HC595_RCLK = 0;HC595_RCLK = 1;Send_595(0xf7);Send_595(shuma_duan[si]);HC595_RCLK = 0;HC595_RCLK = 1;Send_595(0xef); Send_595(shuma_duan[wu]);HC595_RCLK = 0;HC595_RCLK = 1;Send_595(0xdf); Send_595(shuma_duan[liu]);HC595_RCLK = 0;HC595_RCLK = 1;Send_595(0xbf); Send_595(shuma_duan[qi]);HC595_RCLK = 0;HC595_RCLK = 1;Send_595(0x7f); Send_595(shuma_duan[ba]);HC595_RCLK = 0;HC595_RCLK = 1;
}

个人见解,感谢阅读。

51单片机PCF8591-AD-DA转换相关推荐

  1. 单片机C语言DA转换,51单片机PCF8591的DA转换程序详解[含HL-1与HJ-c52 DA代码AD/DA原理图](可直接复......

    以下是补充(能想到的范围有限有没想到的还请谅解) DA工作原理 基于PCF8591芯片 DA是什么? n DA指数模转换(Digital to Analog),顾名思义,就是把数字信号转换成模拟信号. ...

  2. AD/DA转换(XPT2046)

    AD/DA介绍 AD(Analog to Digital):模拟-数字转换,将模拟信号转换为计算机可操作的数字信号 DA(Digital to Analog):数字-模拟转换,将计算机输出的数字信号转 ...

  3. PCF8591 ---AD\DA转换器的使用(IIC通信的软件模拟与应用) (by 51单片机)

    依旧是借着蓝桥杯的机会,来学习一些模块,和软件模拟一些通信方式. 今天学习的模块是PCF8591,一款AD\DA转换器,使用IIC通信方式. 芯片的内部框图如下所示: 各引脚作用如下表所示: 仍旧和之 ...

  4. 基于51单片机的AD转换设计

    一.设计目的 掌握AD转换芯片的基本工作原理: 掌握一个完整的C语言程序结构: 熟悉AD转换与单片机的使用的编程. 二.设计环境 Keil开发环境 Proteus软件. 三.设计及调试 (1) 设计内 ...

  5. PCF8591芯片的AD/DA转换(适用于蓝桥杯单片机)

    目录 1.PCF8591的引脚介绍 2.用IIC发送或接收字节 发送的第一个字节 发送的第二个字节 发送第三个字节 3.发送和接收的字节转换 4.全部代码 IIC部分 接收电压数据 发送电压数据 1. ...

  6. 51单片机——AD/DA转换

    模数和数模转换 A:模拟量        D:数字量 模拟量:自然界连续变化的物理量.所谓连续,包含两个方面的含义: 一方面从时间上来说,它是随时间连续变化的: 另一方面从数值上来说,它的数值也是连续 ...

  7. [网友问答1]STM32驱动PCF8591模块,实现AD/DA转换

    欢迎关注 程序员小哈带你玩转嵌入式,微信搜索:嵌入式从0到1,更多干货等着你. 想进小哈技术交流群,请加程序员小哈个人微信,带你嵌入式入门进阶. 问题原由 粉丝提问,STM32如何驱动PCF8591? ...

  8. 基于51单片机的AD转换

    A/D转换 选用芯片:AT89S52 函数功能:如下代码 /******************************************************************* 此函 ...

  9. 十四、51单片机之AD转换

    1.AD相关简介 1.1.什么是AD转换? (1)A是指analog.模拟的:D是指digital.数字的. (2)现实世界是模拟的,连续分布的,无法被分成有限份:计算机世界是数字的,离散分布的,是可 ...

  10. PCF8591模块ad/da转换

    A/D转换获取电压值 0x43从滑动变阻器中获得电压 0x41从光敏电阻获得电压 实时电压/51.0 给芯片0~255值控制电压0~5v

最新文章

  1. 巨杉数据库通过“Mpp数据库基础能力认证”,权威技术认证金融级数据库
  2. GAN(Generative Adversarial Network,GAN)模型之:SeqGAN、IRGAN、StackGAN、BigBiGAN、GAIN模型
  3. 尼姆博奕 (Nimm Game) 异或运算;
  4. Oracle中的Union、Union All、Intersect、Minus 使用用法区别
  5. 删除Windows 系统快捷方式箭头 Delete Windows Shortcuct Arrows
  6. 怪物行为树案例_Behavior Designer行为树(简单实现巡逻)
  7. k8s问题 CrashLoopBackOff
  8. Qt|OpenGL-天空盒子的创建
  9. 如何选择漏电保护器规格型号_老师傅告诉你:电路跳闸如何解决
  10. STM32串口编程易错点
  11. 英语四级阅读猜题的技巧
  12. python用户画像_Python爬虫实践之:简书用户画像
  13. ssh连接不上服务器
  14. wegame安装包文件MD5校验失败解决方案
  15. 在线生成透明ICO图标
  16. 内容协商 Spring ContentNegotiation
  17. 本人的月末结账步骤备忘
  18. 蒙特卡洛(Monte Carlo)
  19. Golang 之 IED 安装(mac)
  20. 如何获得复权后的股票数据

热门文章

  1. 超市收费系统云服务器,云服务器超市
  2. 适合安装在服务器上使用的操作系统,适合于做服务器的操作系统有
  3. Tesra超算网络——AI训练深度学习平台,降低了AI开发的成本和门槛
  4. centos:centos7.3镜像下载
  5. 《炒股的智慧》文摘1
  6. 系统关键文件丢失或损坏
  7. Python pyecharts Geo函数的应用
  8. 解决下载软件老是附带流氓软件的下载问题
  9. 【2017-02-05】【抓包】鼠大侠鼠标连点器去广告
  10. 利用微信开发者工具获取小程序指定页面路径!