📄 adc0831.c
字号:
#include<reg51.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
/****数码管为共阳**-0----1----2----3----4----5----6----7----8---9---全选-**/
uchar code duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
/******************-1----2----3----4----5----6----7----8---全选-***********/
uchar code wei[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0xff};
uchar k[9]={0,0,0,0,0,0,0,0,10};
sbit cs=P1^0; //0831片选信号,低电平开始一次转换,高电平结束转换
sbit clk=P1^1; //0831时钟信号
sbit dat=P1^2; //0831数据输出
sbit SCK=P2^0; //595时钟信号 11脚
sbit RCK=P2^1; //595锁存信号 12脚
sbit SER=P2^2; //595数据输入 14脚
/****************************************
延时函数
****************************************/
void delay()
{
uchar j;
for(j=248;j>0;j--);
}
/****************************************
595显示函数
*****************************************/
void In595(uchar m,uchar n)
{
uchar i,temp;
temp=duan[m]; //先传段
if(n==4) temp=temp&0x7f; //加小数点
for(i=0;i<8;i++)
{
SCK=0;
SER=temp&0x80;
temp<<=1;
SCK=1;
}
temp=wei[n]; //再传位
for(i=0;i<8;i++)
{
SCK=0;
SER=temp&0x80;
temp<<=1;
SCK=1;
}
RCK=0;
RCK=1; //传完后锁存
}
/**********************************
ADC0831
***********************************/
uint ADC_read()
{
uchar i;
uint dig=0;
cs=0;
delay();
clk=1;
clk=0; //第一个时钟,下降沿触发
for(i=8;i>0;i--)
{
clk=1;
clk=0;
dig=dig|dat;
dig=dig<<1;
_nop_();
}
cs=1; //转换结束
delay();
return(dig);
}
/**********************************
主函数
***********************************/
void main(void)
{
uint temp,vot;
uchar j;
while(1)
{
temp=ADC_read();
// temp=0xff;
vot=temp*5.0*10000/0xff;
k[0]=vot%10;
k[1]=vot/10%10;
k[2]=vot/100%10;
k[3]=vot/1000%10;
k[4]=vot/10000%10;
// k[5]=vot/100000%10;
// k[6]=vot/1000000%10;
// k[7]=vot/10000000;
for(j=0;j<9;j++)
{
In595(k[j],j);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -