最近看网上有很少的ADC0804的设计了,都由0809代替,但是有个别因为成本原因和学校课程设计要求需要ADC0804的,可以看此程序,仿真一并配齐,全套资料请打包下载:
单片机源程序如下:
- #include<reg51.h>
- #include<intrins.h>
- #define uint unsigned int
- #define uchar unsigned char
- sbit rd=P3^6; //ADC0804IO口定义
- sbit wr=P3^5;
- sbit cs=P3^7;
- sbit int1=P3^4;
- //液晶LCD1602定义
- sbit rs=P2^5;
- sbit rw=P2^6;
- sbit e=P2^7;
- //0804转换变量
- unsigned int date;
- uchar Vol;
- uint V;
- void delay_uint(uint z) //液晶驱动延迟
- {
- while(z--);
- }
- /********************************************************************
- * 名称 : write_com(uchar com)
- * 功能 : 1602命令函数
- * 输入 : 输入的命令值
- * 输出 : 无
- ***********************************************************************/
- void write_com(uchar com)
- {
- e=0;
- rs=0;
- rw=0;
- P0=com;
- delay_uint(25);
- e=1;
- delay_uint(100);
- e=0;
- }
- /********************************************************************
- * 名称 : write_data(uchar dat)
- * 功能 : 1602写数据函数
- * 输入 : 需要写入1602的数据
- * 输出 : 无
- ***********************************************************************/
- void write_data(uchar dat)
- {
- e=0;
- rs=1;
- rw=0;
- P0=dat;
- delay_uint(25);
- e=1;
- delay_uint(100);
- e=0;
- }
- /***********************lcd1602上显示字符函数************************/
- void write_string(uchar hang,uchar add,uchar *p)
- {
- if(hang==1)
- write_com(0x80+add);
- else
- write_com(0x80+0x40+add);
- while(1)
- {
- if(*p == '\0') break;
- write_data(*p);
- p++;
- }
- }
- /***********************lcd1602上显示两位十进制数************************/
- void write_sfm2(uchar hang,uchar add,uint date)
- {
- if(hang==1)
- write_com(0x80+add);
- else
- write_com(0x80+0x40+add);
- write_data(0x30+date/100);
- write_string(2,8,".");
- write_data(0x30+date/10%10);
- write_data(0x30+date%10);
- }
- /***********************lcd1602初始化设置************************/
- void init_1602() //lcd1602初始化
- {
- write_com(0x38);
- write_com(0x0c);
- write_com(0x06);
- delay_uint(1000);
- write_string(1,0,"The Voltage is: ");
- write_string(2,8,".");
- write_string(2,11,"V ");
- write_sfm2(2,7,date);
- }
- void delay(uint z)
- {
- uint x;
- while(z--)
- for(x=0;x<120;x++);
- }
- uchar read_0804()
- {
- wr=0; //在片选信号CS为低电平情况下(由于CS接地,所以始终为低电平),
- _nop_(); //WR由低电平到高电平时,即上升沿时,AD开始采样转换
- wr=1;
- delay(1); //延时1ms,等待采样转换结束
- P1=0xff; //这条语句不能少,我也还不知道为什么
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
056-ADC0804电压表.zip
(2.83 MB, 下载次数: 126)
|