RS485测控模块,非常实用。#include <reg51.h> #define uint unsigned int #define uchar unsigned char #define Tim 65536-50000 sbit DAT0 =P2^2; sbit DAT1 =P2^3; sbit DICS =P2^4; sbit DOCS =P2^5; sbit CLK =P2^6; sbit ADCS =P1^5; sbit DAT3 =P1^6; sbit DAT4 =P1^7; sbit DACS =P3^5; sbit DAT2 =P3^4; bit KeyOn; uchar disp[6]; uint para[8],ptr; uchar ts; uchar DO[3],DI[3],DA[4]; uint AD[16]; void time(uint t) { uint i; for(i=0;i<t;i++); } void write8(uchar x) { uchar i; CLK=1; for(i=0;i<8;i++) { x=x<<1; DAT0=CY; CLK=0; CLK=0; CLK=0; CLK=1; CLK=1; CLK=1; } } void DO24() { write8(DO[2]); write8(DO[1]); write8(DO[0]); DOCS=1; DOCS=0; } uchar read8() { uchar x=0,i; DAT1=1; CLK=1; for(i=0;i<8;i++) { CLK=0;CLK=0;CLK=0; x=x<<1; if(DAT1) x++; CLK=1;CLK=1;CLK=1; } return x; } void DI24() { DICS=0; DICS=1; DI[2]=read8(); DI[1]=read8(); DI[0]=read8(); } void TLC5620(uchar ch,uchar x) { uchar i,p; //p=ch<<6; CLK=0; p=(ch*2+1)<<5; for (i=0; i<3; i++) { p=p<<1; DAT2=CY; CLK=1; CLK=0; } p=x; for (i=0; i<8; i++) { p=p<<1; DAT2=CY; CLK=1; CLK=0; } DACS=0; DACS=1; CLK=1; } uint TLC1543(uchar p) { uint res=0; uchar i; CLK=0; ADCS=0; p=p<<4; for (i=0;i<10;i++) //把通道号打入1543 { p=p<<1; DAT4=CY; CLK=1; CLK=0; } ADCS=1; //等待AD转换 time(50); ADCS=0; for (i=0;i<10;i++) //取D9--D5 { CLK=1; res<<=1; DAT3=1; if(DAT3) res++; CLK=0; } ADCS=1; CLK=1; return res; } void tim0() interrupt 1 //定时中断 { static uchar i,j; TH0=Tim>>8;TL0=Tim&0xff; DI24(); DO24(); if(++i>3) i=0; if(++j>15) j=0; TLC5620(i,DA[i]); AD[j]=TLC1543(j); if(ts<255) ts++; }
- 粉丝: 3
- 资源: 2
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助