带0804的程序主要是 用于与ADC0804 AD转换器接口的程序。ADC0804是一款8位全MOS中速A/D转换器,逐次逼近式工作,具有三态数据输出锁存器,能够直接与单片机接口。以下是一个基于51单片机的ADC0804驱动程序示例,该程序通过ADC0804测量模拟电压,并将结果显示在LCD1602液晶显示屏上。
```c
include include "adc0804.h" include "lcd1602.h" define uchar unsigned char define uint unsigned int sbit adrd = P3^7; // ADC0804的数据输出端 sbit diola = P2^5; // LCD1602的数据输入端 uchar j, k, adval; void delay(uchar i) { for (j = i; j > 0; j--) for (k = 125; k > 0; k--); } void adc0804_init() { P2 = 0xF0; // 初始化LCD1602 delay(100); P2 = 0x38; // 设置LCD1602为8位数据,2行显示,5x7点阵 delay(100); P2 = 0x0C; // 设置LCD1602为显示开,光标关闭 delay(100); P2 = 0x06; // 设置LCD1602为光标移动方向:右 delay(100); P2 = 0x01; // 设置LCD1602为清屏 delay(100); } uchar adc0804_read() { AD0804_CS = 0; // CS = 0,开始转换 AD0804_WR = 0; // WR = 0,开始读取 delay(1); AD0804_WR = 1; // WR = 1,结束读取 delay(1); AD0804_CS = 1; // CS = 1,结束转换 return AD0804_RD; } void lcd1602_write_cmd(uchar cmd) { P2 = 0x80 | cmd; delay(1); } void lcd1602_write_data(uchar dat) { P2 = 0x40 | dat; delay(1); } void lcd1602_init() { lcd1602_write_cmd(0x38); // 设置为8位数据,2行显示,5x7点阵 lcd1602_write_cmd(0x0C); // 设置显示开,光标关闭 lcd1602_write_cmd(0x06); // 设置光标移动方向:右 lcd1602_write_cmd(0x01); // 清屏 } void lcd1602_display_ad_value(uchar value) { char str; sprintf(str, "%d", value); lcd1602_write_cmd(0x80 | 0x40); // 设置指针位置到第一行,第一列 for (uchar i = 0; i < 5; i++) { lcd1602_write_data(str[i]); } } void main() { uchar value; adc0804_init(); lcd1602_init(); while (1) { value = adc0804_read(); lcd1602_display_ad_value(value); } } ``` 这个程序包含了ADC0804的初始化函数`adc0804_init()`,读取函数`adc0804_read()`,以及LCD1602的初始化函数`lcd1602_init()`和显示函数`lcd1602_display_ad_value()`。在主函数`main()`中,程序不断读取ADC0804的转换结果,并将其显示在LCD1602上。 请注意