用stc8h8k64u单片机做个电压表
时间: 2024-05-15 20:13:23 浏览: 203
好的,下面是一个简单的电压测量程序,使用STC8H8K64U单片机和ADC0809芯片进行测量:
```
#include <STC8.H>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit CS=P3^4; //ADC0809片选引脚
sbit RD=P3^5; //ADC0809读取引脚
sbit WR=P3^6; //ADC0809写入引脚
sbit INTR=P1^0; //ADC0809中断引脚
void delay(uint t) //延时函数
{
uint i,j;
for(i=t;i>0;i--)
for(j=110;j>0;j--);
}
void ADC0809() //ADC0809读取函数
{
uchar value;
RD=1; //读取前先将RD置高
WR=1;
CS=0; //将CS置低,选中ADC0809
_nop_();
_nop_();
WR=0; //写入0,启动ADC0809转换
_nop_();
_nop_();
WR=1;
_nop_();
_nop_();
RD=0; //将RD置低,读取数据
_nop_();
_nop_();
value=P0; //读取数据
RD=1;
CS=1;
P2=value; //将读取到的数据显示在P2口
}
void main()
{
INTR=1; //中断引脚设置为输入
P1M0=0x01; //P1.0设置为输入
P1M1=0x00;
P2=0x00; //P2口初始化
while(1)
{
if(INTR==0) //当中断引脚为低电平时,开始读取数据
{
ADC0809(); //读取数据
}
delay(100); //延时一段时间
}
}
```
在这个程序中,我们使用了ADC0809芯片来进行电压测量。该芯片是一个8位分辨率的模数转换器,可以将模拟信号转换成数字信号。
在程序中,我们首先定义了ADC0809芯片的片选、读取和写入引脚。然后定义了一个ADC0809()函数来读取数据。在该函数中,我们首先将RD引脚置高,然后将CS引脚置低,选中ADC0809芯片。然后将WR引脚置0,启动ADC0809转换。转换完成后,将WR引脚置1,然后将RD引脚置低,读取数据。最后将RD引脚置高,CS引脚置高,完成一次数据读取。读取到的数据通过P2口显示出来。
在主函数中,我们不断轮询中断引脚的状态,当中断引脚为低电平时,开始读取数据。然后延时一段时间,等待下一次读取。
需要注意的是,ADC0809芯片需要外部提供参考电压,可以通过连接一个稳压电源来提供参考电压。同时,还需要在程序中进行一些配置来设置ADC0809芯片的工作模式和参考电压。具体的配置可以参考ADC0809芯片的数据手册。
阅读全文