⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adc0832.c

📁 有关于共阳数码管的驱动程序 用c51写的 希望对大家有帮助
💻 C
字号:
/*******************************************************

               ADC0832数字电压表实验
          网址:http://www.kaifaban.com

	   传感器接口说明:从左到右依次为通道1,地,通道2
       功能:在数码管上显示传感器接口通道2输入的电压
            小数部分为7位,整数部分1位
			测量范围:0~5V

*******************************************************/
#include <reg52.h>
#include <intrins.h>
#define  uint unsigned int
#define  uchar unsigned char
uchar Code[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff}; //共阳数码管编码表
uchar Bit[8]={0,0,0,0,0,0,0,0}; //数码管各位显示的数字
sbit CLK=P1^7; //定义时钟信号IO口
sbit CS=P3^3; //定义片选信号IO口
sbit DI=P1^5; //定义数据输入IO口
sbit DO=P1^6; //定义数据输出IO口
sbit DsySelect=P3^6; //控制数码管的74HC244所在IO口
uchar BitCode=0x80; //数码管位码初值
unsigned long V=0; //电压扩大10000000的值
uchar Data=0; //从AD中读取的值
//延时函数
void delay(uchar ms){
uchar i;
while(ms--){
for(i=0;i<125;i++);
}
}
//实现AD转换
void AdChange(){
uchar i;
CLK=0;
CS=0; //打开芯片

DI=1; //启动位
CLK=1;
CLK=0;

DI=1; //配置位1
CLK=1;
CLK=0;

DI=1; //配置位2
CLK=1;
CLK=0;
//读取转换后的值
for(i=0;i<8;i++){
CLK=1;
CLK=0;
Data=(Data<<1)|DO;
}

CS=1;//关闭芯片
}
//扫描显示程序
void Dispaly(){
uchar i;
for(i=0;i<8;i++){
P2=BitCode; //输出位码
if(i==0){ //输出段码,如果第1位显示小数点
P0=Code[Bit[i]]&0x7F;
}else{
P0=Code[Bit[i]];
}
BitCode=_cror_(BitCode,1); //位码循环右移一位
delay(1); //延时1ms
P0=0xFF;
}
}
//电压计算程序
void GetV(){
V=Data*(50400000/255); //计算电压并扩大10000000倍,50400000是参考电压5.04扩大10000000倍得到的
//计算数码管各位要显示的数值
Bit[0]=V/10000000;
Bit[1]=V%10000000/1000000;
Bit[2]=V%1000000/100000;
Bit[3]=V%100000/10000;
Bit[4]=V%10000/1000;
Bit[5]=V%1000/100;
Bit[6]=V%100/10;
Bit[7]=V%10;
}
//主函数
main(){
DsySelect=0; //打开数码管
P0=0xFF; //复位P0口
P2=0xFF; //复位P2口
while(1){
AdChange(); //AD转换
GetV(); //计算电压值
Dispaly(); //电压显示程序
}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -