本帖最后由 全俊玮 于 2019-4-11 19:54 编辑
这个是由stc15最小系统板和1602加tcl2345 12位的AD构成的一个简易直流电压表
用分压式探测被测电压经过AD转换读取值然后经过转换公式给1602显示出来。
15最小系统板是自己买的 1602显示很简单的
tcl2543还可以测很多路可以自己加以利用。
单片机源程序如下:
- #include "main.h"
- #include "delay.h"
- #include "lcd1602.h"
- u8 count = 0,i;
- float sum;
- double sum1;
- float sum_l;
- u8 a,b,c,d,e,f,g,h;
- u8 i;
- u8 q1[]={"0123456789"};
- u16 num;
- sbit CLOCK=P3^3; //2543时钟
- sbit D_IN =P3^4; //2543输入
- sbit D_OUT=P3^5; //2543输出
- sbit _CS =P3^6 ;//2543片选
- //sbit RS = P5^0;
- //sbit RW = P5^1;
- //sbit EN = P5^2;
- //sbit LCD1602_Backlight = P5^4;
- void GPIO_config(void)
- {
- P5M0 &= ~(1<<5); //设置P5.5为准双向口
- P5M1 &= ~(1<<5);
-
- P3M1 &= ~(1<<3);
- P3M0 &= ~(1<<3);
- P3M1 &= ~(1<<4);
- P3M0 &= ~(1<<4);
- P3M1 &= ~(1<<5);
- P3M0 &= ~(1<<5);
-
- P3M1 &= ~(1<<6);
- P3M0 &= ~(1<<6);
-
- P2M1 &= ~(1<<3);
- P2M0 &= ~(1<<3);
-
- P2M1 &= ~(1<<4);
- P2M0 &= ~(1<<4);
-
- //P5M1 &= ~(1<<0);
- //P5M0 &= ~(1<<0);
- //
- //P5M1 &= ~(1<<1);
- //P5M0 &= ~(1<<1);
- //P5M1 &= ~(1<<2);
- //P5M0 &= ~(1<<2);
- P4M1 = 0X00; //设置P4为准双向IO
- P4M0 = 0X00;
- //P5M1 &= ~(1<<4); //设置P5.4为推挽输出
- //P5M0 |= (1<<4);
-
- }
- u16 read2543(u8 port)
- {
- u16 ad = 0,i;
- CLOCK = 0;
- _CS = 0;
- port<<=4;
- for(i=0;i<12;i++)
- {
- if(D_OUT) ad|=0x01;
- D_IN=(bit)(port&0x80);
- CLOCK=1;
- delay_ms(3);
- CLOCK=0;
- delay_ms(3);
- port<<=1;
- ad<<=1;
- }
- _CS=1;
- ad>>=1;
- return(ad);
-
- }
- void main(void)
- {
- GPIO_config();
- Init_LCD1602();
- LCD1602_write_com(0x80); //指针指向第1行第0个位置
- LCD1602_write_word("QuanJunwei ");
- LCD1602_write_com(0x80+0x40); //指针指向第2行第0个位置
- LCD1602_write_word("0-5v: ");
- while(1)
- {
- sum = read2543(0);
- sum1=(sum/4096)*5.12;
- sum_l=sum1*100000;
- c=(long)sum_l%1000000/100000;
- d=(long)sum_l%100000/10000;
- e=(long)sum_l%10000/1000;
- //f=(long)sum_l%1000/100;
- g=(long)sum_l%100/10;
- h=(long)sum_l%10;
- LCD1602_write_com(0x80+13);
- LCD1602_write_word("520");
-
- if(sum_l>1000)
-
- {
- delay_ms(100);
- LCD1602_write_com(0x80+0x40);
- LCD1602_write_word("0-5v: ");
- LCD_Write_Char(7,1,q1[c]);
-
- LCD_Write_Char(8,1,'.');
-
- LCD_Write_Char(9,1,q1[d]);
-
- LCD_Write_Char(10,1,q1[e]);
-
- LCD_Write_Char(11,1,q1[f]);
-
- //LCD_Write_Char(12,1,q1[g]);
-
- //LCD_Write_Char(13,1,q1[h]);
-
- LCD_Write_Char(14,1,' ');
-
- LCD_Write_Char(12,1,'V');
- delay_ms(1000);
- delay_ms(500);
- }
- else
- {
- delay_ms(100);
- LCD1602_write_com(0x80+0x40);
- LCD1602_write_word("0-5v: ");
-
- //LCD_Write_Char(5,1,q1[c]);
-
- //LCD_Write_Char(6,1,q1[d]);
-
- LCD_Write_Char(7,1,q1[e]);
-
- LCD_Write_Char(9,1,q1[f]);
-
- LCD_Write_Char(8,1,'.');
-
- LCD_Write_Char(10,1,q1[g]);
-
- LCD_Write_Char(11,1,q1[h]);
-
- //LCD_Write_Char(14,1,'M');
-
- //LCD_Write_Char(15,1,'V');
- delay_ms(1000);
- }
- }
- }
复制代码
所有资料51hei提供下载:
5V直流电压表.rar
(98.24 KB, 下载次数: 27)
|