#include <reg51.h> #include <intrins.h> #define uchar unsigned char; #define uint unsigned int; sbit adc_wr=P3^6; sbit adc_rd=P3^7; sbit s1=P2^0; sbit s2=P2^1; sbit s3=P2^2; sbit s4=P2^3; unsigned char Disbuf[]={0,0,0}; unsigned char SMG[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff}; void display(); void delayms() { unsigned char i; for(i=0;i<250;i++); } void display() { P1=SMG[Disbuf[2]]; s4=0; delayms(); s4=1; P1=SMG[Disbuf[1]]; s3=0; delayms(); s3=1; if(Disbuf[0]==0) { Disbuf[0]=10; P1=SMG[Disbuf[0]]; } else P1=SMG[Disbuf[0]]; s2=0; delayms(); s2=1; P1=0xff; s1=0; delayms(); s1=1; } void adc() { adc_wr=0; _nop_(); adc_wr=1; } unsigned char read() { unsigned char r; P0=0xff; _nop_(); adc_rd=0; _nop_(); r=P0; _nop_(); adc_rd=1; return(r); } void fw(unsigned char dat) { unsigned int i; i=dat*2.353; Disbuf[0]=i/100; Disbuf[1]=(i%100)/10; Disbuf[2]=(i%100)%10; } void main() { unsigned char p; while(1) { adc(); fw(read()); for(p=0;p<20;p++) display(); } } 每行添加相应的中文注释
时间: 2024-04-27 13:21:49 浏览: 183
#include <reg51.h> // 8051单片机头文件
#include <intrins.h> // 延时函数头文件
#define uchar unsigned char; // 定义无符号字符类型
#define uint unsigned int; // 定义无符号整型类型
sbit adc_wr=P3^6; // 定义ADC写入端口
sbit adc_rd=P3^7; // 定义ADC读取端口
sbit s1=P2^0; // 定义第一个数码管选择端口
sbit s2=P2^1; // 定义第二个数码管选择端口
sbit s3=P2^2; // 定义第三个数码管选择端口
sbit s4=P2^3; // 定义第四个数码管选择端口
unsigned char Disbuf[]={0,0,0}; // 数码管显示数组
unsigned char SMG[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff}; // 数码管显示码表
void display(); // 数码管显示函数
void delayms() // 延时函数
{
unsigned char i;
for(i=0;i<250;i++);
}
void display() // 数码管显示函数
{
P1=SMG[Disbuf[2]]; // 显示第三个数码管
s4=0; // 选择第四个数码管
delayms(); // 延时
s4=1; // 取消选择第四个数码管
P1=SMG[Disbuf[1]]; // 显示第二个数码管
s3=0; // 选择第三个数码管
delayms(); // 延时
s3=1; // 取消选择第三个数码管
if(Disbuf[0]==0) // 如果第一个数码管显示0
{
Disbuf[0]=10; // 将第一个数码管修改为10(显示空)
P1=SMG[Disbuf[0]]; // 显示空
}
else // 否则
P1=SMG[Disbuf[0]]; // 显示第一个数码管
s2=0; // 选择第二个数码管
delayms(); // 延时
s2=1; // 取消选择第二个数码管
P1=0xff; // 关闭数码管
s1=0; // 选择第一个数码管
delayms(); // 延时
s1=1; // 取消选择第一个数码管
}
void adc() // ADC转换函数
{
adc_wr=0; // 写入ADC
_nop_(); // 空操作
adc_wr=1; // 取消写入ADC
}
unsigned char read() // 读取ADC值函数
{
unsigned char r;
P0=0xff; // P0口输出全高电平
_nop_(); // 空操作
adc_rd=0; // 读取ADC值
_nop_(); // 空操作
r=P0; // 读取P0口的值
_nop_(); // 空操作
adc_rd=1; // 取消读取ADC值
return(r); // 返回ADC值
}
void fw(unsigned char dat) // 数字转换函数
{
unsigned int i;
i=dat*2.353; // 将ADC值转换为电压值
Disbuf[0]=i/100; // 将百位数存入Disbuf数组
Disbuf[1]=(i%100)/10; // 将十位数存入Disbuf数组
Disbuf[2]=(i%100)%10; // 将个位数存入Disbuf数组
}
void main()
{
unsigned char p;
while(1)
{
adc(); // 进行ADC转换
fw(read()); // 将ADC转换为电压值
for(p=0;p<20;p++) // 循环20次显示数码管
display(); // 显示数码管
}
}
阅读全文