這是我做的基于adc0832的電壓表,模擬電壓輸入0-5v,adc0832模數轉換
運用四位數碼管顯示,精確到第三位小數點,protues仿真,單片機型號為stc89c52
0.png (954.23 KB, 下載次數: 118)
下載附件
2017-6-8 02:58 上傳
0.png (60.32 KB, 下載次數: 118)
下載附件
2017-6-8 02:58 上傳
單片機源程序如下:
- #include<AT89x51.h>
- #include<intrins.h> //頭文件聲明
- #define uchar unsigned char
- #define uint unsigned int //定義數據類型
- sbit CS=P2^3; //0832的cs為單片機p2.3
- sbit CLK=P2^2; //0832的clk為單片機p2.2
- sbit DO=P2^1; //0832的do為單片機p2.1
- sbit DI=P2^0; //0832的di為單片機p2.0
- uchar tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x83,0xf8,0x80,0x98};//共陽數碼管編碼
- uint vvv,i; //聲明電壓值vvv
- void delay (int tt) //延時函數,時間為tt*0.5ms
- {
- while(tt--)
- {
- for(i=0;i<300;i++);
- }
- }
- uchar Get_AD_Result()
- {
- uint j=0;
- uchar dat1=0;
- CS=1;
- CLK=0; _nop_(); _nop_();
- CS = 0; _nop_(); _nop_();
- CLK = 1; _nop_(); _nop_(); //第一個上升沿
- DI = 1; _nop_(); _nop_(); //起始信號
- CLK = 1; _nop_(); _nop_();
- CLK = 0;DI = 1; _nop_(); _nop_(); //第一個下降
- CLK = 1; _nop_(); _nop_();
- CLK = 0;DI = 1; _nop_(); _nop_(); //第二個下降
- CLK = 1;DI = 0; _nop_(); _nop_();
- CLK = 0;DI = 1; _nop_(); _nop_(); //第三個下降后,須將DI置高,準備接收數據
- for(j=0;j<8;j++)
- {
- CLK = 1; _nop_(); _nop_(); //第四個下,一位一位的讀取數據
- CLK = 0; _nop_(); _nop_();
- if(DO) //如果這一位數據為1,dat1與0x01或等,最后一位變?yōu)?
- {
- dat1|=0x01;
- }
- else //或者這一位數據為0,將dat1于0xfe與等,最后一位變成0
- {
- dat1&=0xfe;
- }
- CLK=0;
- _nop_();
- CLK=1; //上升沿,輸出數據
- dat1=dat1<<1; //將數據進行左移運算,一直到8位移入完成
- }
- CS = 1; //使能置高,禁用AD芯片
- return dat1; //返回AD值
- }
- void display(uint dat) //顯示函數程序
- {
- P1=0xff; //消隱 ,顯示方式為動態(tài)顯示
- P0=0x08; //通過p0口驅動,顯示最高位,個位
- P1=tab[dat/100]&0x7f; //計算出個位數字,并帶小數點進行顯示
- delay(1); //延時
- P1=0xff;
- P0=0x04; //顯示小數點后第一位
- P1=tab[dat%100/10];
- delay(1);
- P1=0xff;
- P0=0x02; //顯示小數點后第二位
- P1=tab[dat%10];
- delay(1);
- P1=0xff;
- P0=0x01; //顯示最后一位
- P1=tab[dat%1];
- delay(1);
- P1=0xff;
- } //主函數
- void main()
- {
- //P1=0xff; //清零
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
adc0832.rar
(63.36 KB, 下載次數: 80)
2017-6-8 03:00 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|