📄 text1.c
字号:
#include <AT89X52.h>
#include <intrins.h>
#define ADCS P1_0 //我比较喜欢宏定义 这样可一适应硬件
#define ADCLK P1_1
#define ADDO P1_2
unsigned char code tab []={0xc0, //不带点的共阳极数码管
0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90};
unsigned char code tab2 [10]={0x40, //带点的共阳极数码管
0x79,0x24,0x30,0x19,0x12,0x02,0x78,
0x00,0x10};
/******************1ms延时函数************/
delay1ms(int t)
{
int i,j;
for(i=0;i<t;i++)
for(j=0;j<120;j++) ;
}
/************************************************
LED数码管(显示)功能子函数
*************************************************/
void display (int k)
{
P2=0X00;
P0=tab[k%10];
P2_3=1; //个位
delay1ms(1);
P2=0X00;
P0=tab[k%100/10]; //十位
P2_2=1;
delay1ms(1);
P2=0X00;
P0=tab2[k%1000/100]; //百位
P2_1=1;
delay1ms(1);
P2=0X00;
P0=tab[k/1000]; //千位
P2_0=1;
delay1ms(1);
P2=0X00;
}
/***************************************/
/*************ADC0831驱动***************/
/***********入口参数无******************/
/*************返回值 (ADValue)********/
unsigned int ADConv()
{
unsigned char i; int ADValue=0;
ADCS= 0;
_nop_();
_nop_();
ADCLK=1;
_nop_();
_nop_();
ADCLK=0;
_nop_();
_nop_();
ADCLK=1;
_nop_();
_nop_();
ADCLK=0;
_nop_();
_nop_();
for(i=0;i<=8;i++) //准备送后 8个时钟脉冲
{
if(ADDO)
ADValue|=0x01; //末尾置1
ADValue=ADValue<<1; //右移一位
ADCLK=1;
_nop_();
_nop_();
ADCLK=0;
_nop_();
_nop_();
}
ADCS=1; //拉高C|S|端
ADCLK=0; //拉低CLK
ADDO=1; //拉高ADDO 回到初始状态
return(ADValue);
}
/************主函数开始************/
main()
{
unsigned int ADValue;
ADValue=ADConv()/2.04; //这里我不知道什么返回的值不对,我加/
//2.04是为了软件校正 ,那位有更加好方法和我聊聊哦
display(ADValue); //调用显示 函数
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -