//adc
#define XMS 1000 /* 定时中断间隔 12MHz,1uS */
#include <reg51.h>
#include <stdio.h>
#define uchar unsigned char
extern unsigned adc(char path); /* 这个函数的定义在"tlc2543.c"中*/
sbit KEY1 =P2^7; /* path+1 */
sbit KEY2 =P2^6; /* path-1 */
sbit KEY3 =P2^5; /* path=0 */
sbit KEY4 =P2^4; /* 显示 path或者volt */
char buf[5]={0,0,0,0,0};
char low[4]={0xfe,0xfd,0xfb,0xf7};
char disppoint;
uchar ms;
int volt;
int pathx;
code char seg[]={0x22,0xfa,0x31,0x25,0xac,0x64,0x60,0x2f,0x20,0x24}; /* 显示段表*/
void delayms(int t)
{
uchar i;
while(t--)
{
i=100;
while(i--);
}
}
void put_num(char c)
{
P0=seg[c&0x0f];
}
void timer0( ) interrupt 1 using 1 /*定时器中断程序*/
{
EA=0;
//显示:
TH0=-(XMS/256);
TL0=-(XMS%256);
disppoint&=3;
put_num(buf[disppoint]);
P2=low[disppoint];
disppoint++;
EA=1;
}
bit pv;
main()
{
char i,ss[5];
TMOD=0x01;
TH0=-(XMS/256); /* 5ms */
TL0=-(XMS%256);
TR0=1;
EA=1;
while(1)
{
ET0=1;
if(!KEY1 && pathx<11){pathx++;delayms(300);}
if(!KEY2 && pathx>0){pathx--;delayms(300);}
if(!KEY3){pathx=0;delayms(300);}
if(!KEY4) {pv=!pv;delayms(300);}
volt=adc(pathx);
if(pv) sprintf(ss,"%04d",pathx);
else sprintf(ss,"%04d",volt);
for(i=0;i<4;i++)buf[i]=ss[i];
}
}
#include <reg51.h>
#define uchar unsigned char
#define H 1
#define L 0
sbit ADC_CS = P1^0;
sbit ADC_CLK = P1^1;
sbit ADC_IN = P1^2;
sbit ADC_OUT = P1^3;
unsigned adc1(uchar path)
{
char i;
unsigned cc;
ADC_CLK=L;
ADC_CS=L;
ADC_OUT=1;
cc=0;
for(i=0;i<12;i++)
{cc<<=1;
if(path&0x80)ADC_IN=1;/*通道*/
else ADC_IN=0;
path<<=1;
ADC_CLK=H;
if(ADC_OUT)cc|=1;
ADC_CLK=L;
}
ADC_CS=H;
return(cc);
}
unsigned adc(uchar path) /* path = 0-10 */
{
data unsigned cc;
path<<=4;
adc1(path); /* set path*/
cc=adc1(path);
return(cc);
}