|
STC15W401AS自帶AD 4位電壓表AD000.0-500.0。單片機(jī)直接驅(qū)動(dòng)4位共陰數(shù)碼管!采用定時(shí)中斷調(diào)AD!附件有很清楚的注釋!
單片機(jī)源程序如下:
- #include "STC15W401AS.h"
- #include "intrins.h"
-
- sbit GND1=P1^4;
- sbit GND2=P1^3;
- sbit GND3=P1^2;
- sbit GND4=P1^1;
-
- sbit LEDa=P1^5;
- sbit LEDb=P1^6;
- sbit LEDc=P3^3;
- sbit LEDd=P3^1;
- sbit LEDe=P3^0;
- sbit LEDf=P1^7;
- sbit LEDg=P3^2;
- sbit LEDp=P3^4;
- unsigned char count;
- unsigned char PWM=9;
- float dianya; // 電壓
- int dianya1; // 電壓 1
- unsigned char code numtab[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
- //unsigned char code numtab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
- /*-------------------------------------延時(shí)函數(shù)-------------------------------------*/
- void delay (unsigned int a)
- {
- unsigned int i;
- while( --a != 0)
- {
- for (i = 0; i < 12; i++);
- }
- }
- /*-------------------------------------數(shù)碼管消隱-------------------------------------*/
- void displayoff (void)
- {
- GND1=1;
- GND2=1;
- GND3=1;
- GND4=1;
-
- LEDa=0;
- LEDb=0;
- LEDc=0;
- LEDd=0;
- LEDe=0;
- LEDf=0;
- LEDg=0;
- LEDp=0;
- delay(10-PWM);
- }
- /*-------------------------------------個(gè)位碼顯-------------------------------------*/
- void bit1 (unsigned char d)
- {
- unsigned char i;
- i=d&0x01;
- if (i==0x01){
- GND1=0;LEDa=1;}delay(PWM);displayoff();
- i=d&0x02;
- if (i==0x02){
- GND1=0;LEDb=1;}delay(PWM);displayoff();
- i=d&0x04;
- if (i==0x04){
- GND1=0;LEDc=1;}delay(PWM);displayoff();
- i=d&0x08;
- if (i==0x08){
- GND1=0;LEDd=1;}delay(PWM);displayoff();
- i=d&0x10;
- if (i==0x10){
- GND1=0;LEDe=1;}delay(PWM);displayoff();
- i=d&0x20;
- if (i==0x20){
- GND1=0;LEDf=1;}delay(PWM);displayoff();
- i=d&0x40;
- if (i==0x40){
- GND1=0;LEDg=1;}delay(PWM);displayoff();
- i=d&0x80;
- if (i==0x80){
- GND1=0;LEDp=1;}delay(PWM);displayoff();
- }
- /*-------------------------------------十位碼顯-------------------------------------*/
- void bit2 (unsigned char d)
- {
- unsigned char i;
- i=d&0x01;
- if (i==0x01){
- GND2=0;LEDa=1;}delay(PWM);displayoff();
- i=d&0x02;
- if (i==0x02){
- GND2=0;LEDb=1;}delay(PWM);displayoff();
- i=d&0x04;
- if (i==0x04){
- GND2=0;LEDc=1;}delay(PWM);displayoff();
- i=d&0x08;
- if (i==0x08){
- GND2=0;LEDd=1;}delay(PWM);displayoff();
- i=d&0x10;
- if (i==0x10){
- GND2=0;LEDe=1;}delay(PWM);displayoff();
- i=d&0x20;
- if (i==0x20){
- GND2=0;LEDf=1;}delay(PWM);displayoff();
- i=d&0x40;
- if (i==0x40){
- GND2=0;LEDg=1;}delay(PWM);displayoff();
- i=d&0x80;
- if (i==0x80){
- GND2=0;LEDp=1;}delay(PWM);displayoff();
- }
- /*-------------------------------------百位碼顯-------------------------------------*/
- void bit3 (unsigned char d)
- {
- unsigned char i;
- i=d&0x01;
- if (i==0x01){
- GND3=0;LEDa=1;}delay(PWM);displayoff();
- i=d&0x02;
- if (i==0x02){
- GND3=0;LEDb=1;}delay(PWM);displayoff();
- i=d&0x04;
- if (i==0x04){
- GND3=0;LEDc=1;}delay(PWM);displayoff();
- i=d&0x08;
- if (i==0x08){
- GND3=0;LEDd=1;}delay(PWM);displayoff();
- i=d&0x10;
- if (i==0x10){
- GND3=0;LEDe=1;}delay(PWM);displayoff();
- i=d&0x20;
- if (i==0x20){
- GND3=0;LEDf=1;}delay(PWM);displayoff();
- i=d&0x40;
- if (i==0x40){
- GND3=0;LEDg=1;}delay(PWM);displayoff();
- i=d&0x80;
- if (i==0x80){
- GND3=0;LEDp=1;}delay(PWM);displayoff();
- }
- /*-------------------------------------百位碼顯-------------------------------------*/
- void bit4 (unsigned char d)
- {
- unsigned char i;
- i=d&0x01;
- if (i==0x01){
- GND4=0;LEDa=1;}delay(PWM);displayoff();
- i=d&0x02;
- if (i==0x02){
- GND4=0;LEDb=1;}delay(PWM);displayoff();
- i=d&0x04;
- if (i==0x04){
- GND4=0;LEDc=1;}delay(PWM);displayoff();
- i=d&0x08;
- if (i==0x08){
- GND4=0;LEDd=1;}delay(PWM);displayoff();
- i=d&0x10;
- if (i==0x10){
- GND4=0;LEDe=1;}delay(PWM);displayoff();
- i=d&0x20;
- if (i==0x20){
- GND4=0;LEDf=1;}delay(PWM);displayoff();
- i=d&0x40;
- if (i==0x40){
- GND4=0;LEDg=1;}delay(PWM);displayoff();
- i=d&0x80;
- if (i==0x80){
- GND4=0;LEDp=1;}delay(PWM);displayoff();
- }
- /*-------------------------------------數(shù)碼管位顯-------------------------------------*/
- void display(unsigned char l,unsigned char d)
- {
- switch (l)
- {
- case 1:
- bit1(d);
- break;
- case 2:
- bit2(d);
- break;
- case 3:
- bit3(d);
- break;
- case 4:
- bit4(d);
- break;
- }
- }
- /*--------------------------------A/D轉(zhuǎn)換初始化函數(shù)--------------------------------*/
- void Init_ADC()
- {
- P1ASF|=0X03;//設(shè)定P1.0,P1.1為模擬量電壓輸入端
- ADC_RES=0;//清除緩存寄存器
- ADC_CONTR=ADC_PWR+ADC_SPD1;//啟動(dòng)ADC電源,設(shè)定轉(zhuǎn)換速率
- _nop_();
- }
- //========================================================================//
- uint ReadAdc(uchar Chx)//讀取ADC數(shù)據(jù)
- {
- uint ADCDAT;
- Init_ADC();
- ADC_CONTR=ADC_PWR+ADC_SPD1+Chx+ADC_START;//啟動(dòng)轉(zhuǎn)換
- _nop_();
- _nop_();
- _nop_();
- _nop_();//短暫延時(shí)
- while((ADC_CONTR&ADC_FLAG)==0);//等待轉(zhuǎn)換完畢
- //ADC_CONTR&=~ADC_FLAG;//清除轉(zhuǎn)換完成標(biāo)志
- ADC_CONTR &= 0xE7;//1111,0111 清 ADC_FLAG 位, 關(guān)閉A/D轉(zhuǎn)換,
- ADCDAT=ADC_RES;//獲取ADC數(shù)值
- ADCDAT<<=2;
- ADCDAT|=ADC_RESL;
- return ADCDAT;//返回?cái)?shù)值
- }
- /*--------------------------------------主函數(shù)--------------------------------------*/
- void main (void)
- {
- P1M0=0x01; P1M1=0xe0;
- P3M0=0x00; P3M1=0x1f;
- TMOD=0x01;//定時(shí)器工作方式1
- TH0=0x3C;//定時(shí)器初始產(chǎn)生50ms時(shí)基信號(hào)
- TL0=0xB0;//定時(shí)器初始產(chǎn)生50ms時(shí)基信號(hào)
-
- EA=1;//開總中斷
- ET0=1;//開定時(shí)器中斷
- TR0=1;//啟動(dòng)定時(shí)器
- while(1)
- {
- if (count==10)
- {
- /* dianya=ReadAdc(0)*(5.0/4500.0); // 取電壓
- dianya=dianya*100;
- dianya1=(int)dianya;
- */
- dianya=ReadAdc(0);
- dianya1=dianya;
- count=0;
- }
- /* P2=0x01;
- P0=shuzu[dianya1/100]; // 取百位
- DELAY_MS(5);
- P2<<=1;
- P0=shuzu[dianya1%100/10];// 取十位
- DELAY_MS(5);
- P2<<=1;
- P0=shuzu[dianya1%100%10]&0x7f;// 取個(gè)位
- DELAY_MS(5);
- */
- display (1,numtab[dianya1/1000 + '0']); //取百位
- display (2,numtab[dianya1%1000/100 + '0']); //取十位
- display (3,numtab[dianya1%100/10 + '0']); //取個(gè)位
- display (3,numtab[dianya1%10 + '0']); //取小數(shù)點(diǎn)后一位
- }
- }
- /*-----------------------------------中斷服務(wù)程序-----------------------------------*/
- void Timer0_Routine(void) interrupt 1
- {
- TH0=0x3C;
- TL0=0xB0;
- count++;
- }
復(fù)制代碼
所有資料51hei提供下載:
500電壓表.rar
(29.56 KB, 下載次數(shù): 51)
2020-3-26 10:37 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
|