用ADC0832设计的两路电压表protues仿真

更新时间:2023-09-27 09:46:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

#include #include #include\#include\#include\#include\

void main() { }

#ifndef _DEFINE_H_ #define _DEFINE_H_

#define uchar unsigned char #define uint unsigned int

sbit cs=P3^0;

sbit clk=P3^1; //控制端口定义 sbit dio=P3^2; sbit rs=P2^0; sbit rw=P2^1;

sbit en=P2^2; uint j,add,dat;

uchar LCD_buffer[][16]=

LCD_init(); while(1) { }

for(j=0;j<2;j++) { }

if(j==0) add=0x00; else add=0x40; ADC_change(j);

LCD_buffer[j][8]=dat/100+'0'; LCD_buffer[j][10]=dat/10+'0'; LCD_buffer[j][11]=dat+'0'; LCD_display(add,LCD_buffer[j]); delay(1);

{

{\ CH1 = . V \{\ CH2 = . V \}; #endif

#ifndef _LCD1602_H_ #define _LCD1602_H_

uchar LCD_check_busy() { }

uchar state; rs=0; rw=1; delay(2); en=1; state=P0; delay(2); en=0; delay(2); return state;

void LCD_write_cmd(uchar cmd) { }

while((LCD_check_busy()&0x80)==0x80); rs=0; rw=0; delay(2); en=1; P0=cmd; delay(2); en=0; delay(2);

void LCD_write_data(uchar dat) {

while((LCD_check_busy()&0x80)==0x80); rs=1; rw=0; delay(2); en=1;

} {

P0=dat; delay(2); en=0; delay(2);

void LCD_display(uchar add,uchar s[])

uchar i;

LCD_write_cmd(0x80+add); for(i=0;i<16;i++)

LCD_write_data(s[i]); }

void LCD_init() {

LCD_write_cmd(0x38); delay(1);

LCD_write_cmd(0x0c); delay(1);

LCD_write_cmd(0x06); delay(1);

LCD_write_cmd(0x01);

delay(1); }

#endif

#ifndef _ADC0832_H_ #define _ADC0832_H_

uchar ADC_read_data(uchar ch) {

uchar i,dat0=0,dat1=0; cs=0; clk=0;

dio=1; delay_us(); clk=1; delay_us(); clk=0; dio=1; delay_us(); clk=1; delay_us();

//第二次下降沿输入dio=1

//第一次下降沿之前DIO置高,起始信号

clk=0;

dio=ch; //第三个下降沿,设DIO=0; delay_us(); clk=1; delay_us();

/*********二,三个下降沿选择通道1************************/ }

void ADC_change(uchar ch) {

dat=ADC_read_data(ch)*500.0/255;//dat变量要全局变量,重要 LCD_buffer[ch][8]=dat/100+'0'; LCD_buffer[ch][10]=dat/10+'0'; LCD_buffer[ch][11]=dat+'0';

clk=0;

dio=1; //第四个下降沿之前,设DIO=1 delay_us();

for(i=0;i<8;i++)//第4~11共8个下降沿读数据(MSB->LSB) {

clk=1; delay_us(); clk=0; delay_us(); dat0=dat0<<1|dio;

}

for(i=0;i<8;i++) //第11~18共8个下降沿读数据(LSB->MSB) {

dat1=dat1|((uchar)(dio)<

clk=0; delay_us(); } cs=1;

//判断dat0与dat1是否相等

return (dat0==dat1)?dat0:0;

}

#endif

clk=0;

dio=ch; //第三个下降沿,设DIO=0; delay_us(); clk=1; delay_us();

/*********二,三个下降沿选择通道1************************/ }

void ADC_change(uchar ch) {

dat=ADC_read_data(ch)*500.0/255;//dat变量要全局变量,重要 LCD_buffer[ch][8]=dat/100+'0'; LCD_buffer[ch][10]=dat/10+'0'; LCD_buffer[ch][11]=dat+'0';

clk=0;

dio=1; //第四个下降沿之前,设DIO=1 delay_us();

for(i=0;i<8;i++)//第4~11共8个下降沿读数据(MSB->LSB) {

clk=1; delay_us(); clk=0; delay_us(); dat0=dat0<<1|dio;

}

for(i=0;i<8;i++) //第11~18共8个下降沿读数据(LSB->MSB) {

dat1=dat1|((uchar)(dio)<

clk=0; delay_us(); } cs=1;

//判断dat0与dat1是否相等

return (dat0==dat1)?dat0:0;

}

#endif

本文来源:https://www.bwwdw.com/article/4h4d.html

Top