最近看網上有很少的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)
2017-7-24 11:20 上傳
點擊文件名下載附件
|