找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7677|回复: 3
打印 上一主题 下一主题
收起左侧

TLC1543数模转换驱动程序(C语言版)

[复制链接]
跳转到指定楼层
楼主
ID:83710 发表于 2015-6-24 21:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include <reg51.h>
  2. #include <intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. #define ulong unsigned long

  6. sbit TLC1543_CLK=P3^3;         //TLC1543硬件连接
  7. sbit TLC1543_DIN = P3^4;
  8. sbit TLC1543_DOUT= P3^5;
  9. sbit TLC1543_CS = P3^7;
  10. sbit TLC1543_EOC = P3^2;        //这里没用到中断
  11. //*****************************************************************
  12. //数码管显示子程序,将一个数num显示到某一位weixuan数码管
  13. //*****************************************************************
  14. void numdis(uchar num,uchar weixuan,uchar brightness )
  15. {
  16.     while(brightness--)P0=num*0x10+weixuan*0x01;
  17.      P0=0xFF;
  18. }
  19. //*****************************************************************
  20. //将读到的温度显示在六个数码管上,只显示整数部分,即显示精度为一度
  21. //*****************************************************************
  22. void display(uint num)
  23. {
  24.     numdis(num/10000,        4,20);
  25.     numdis(num%10000/1000,     3,20);
  26.     numdis(num%1000/100,    2,20);
  27.     numdis(num%100/10,        1,20);
  28.     numdis(num%10,            0,20);

  29. }
  30. uint read1543(uchar channel) //从TLC1543读取采样值,形参channel是采样的通道号
  31. {
  32.     uint  data ad;
  33.     uint  data i;
  34.     uchar data al=0,ah=0;
  35.    
  36.     TLC1543_CLK = 0;
  37.     TLC1543_CS  = 0;
  38.     for (i=0;i<4;i++) //把通道号打入1543
  39.     {
  40.         TLC1543_DIN=(channel&0x0f);
  41.         TLC1543_CLK=1;
  42.         TLC1543_CLK=0;
  43.         channel<<=1;
  44.     }
  45.    
  46.     for (i=0;i<6;i++) //填充6个TLC1543_CLK
  47.     {
  48.         TLC1543_CLK=1;
  49.         TLC1543_CLK=0;
  50.     }
  51.    
  52.     TLC1543_CS=1;
  53.     _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  54.     _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  55.     _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  56.     _nop_();_nop_();_nop_();
  57.     TLC1543_CS=0; //等待AD转换
  58.     _nop_();_nop_();_nop_();
  59.    
  60.     for (i=0;i<2;i++) //取D9,D8
  61.     {
  62.         TLC1543_DOUT=1;
  63.         TLC1543_CLK=1;
  64.         ah<<=1;
  65.         if(TLC1543_DOUT) ah|=0x01;
  66.         TLC1543_CLK=0;
  67.     }
  68.    
  69.     for (i=0;i<8;i++) //取D7--D0
  70.     {
  71.         TLC1543_DOUT=1;
  72.         TLC1543_CLK=1;
  73.         al<<=1;
  74.         if (TLC1543_DOUT) al|=0x01;
  75.         TLC1543_CLK=0;
  76.     }
  77.    
  78.     TLC1543_CS=1;
  79.     ad=(uint)ah;
  80.     ad<<=8;
  81.     ad|=(uint)al; //得到AD值
  82.     return (ad);
  83. }
  84. uint volt_convert(uchar channel)
  85. {
  86.     uint temp_volt[4];
  87.     ulong sum_volt=0;
  88.     uchar i;
  89.     for(i=0;i<4;i++)
  90.     {
  91.         temp_volt[i] = read1543(channel);
  92.         sum_volt += temp_volt[i];
  93.     }
  94.     return (((sum_volt/4)*500)/1023);

  95. }
  96. main()
  97. {      
  98.     while(1)
  99.     {
  100.         display(volt_convert(2));
  101.    
  102.     }
  103. }
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:119140 发表于 2018-7-23 09:23 | 只看该作者
收到,很好的资料,学习了
回复

使用道具 举报

板凳
ID:518981 发表于 2019-8-7 20:33 | 只看该作者
学习了
回复

使用道具 举报

地板
ID:541071 发表于 2019-8-7 23:45 | 只看该作者
优秀,前一段时间找了好久,不过很强
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表