📄 voltage.c
字号:
#include"reg51.h"
#include<INTRINS.H>
#define uchar unsigned char
/*MAX7219寄存器功能说明**********************************/
#define shutdown 0x0c //0 关闭 1 开启
#define decodemode 0x09 //0 ndecode all
//1 decode 0
//0f decode 0-3
//ff decode all
#define intensity 0x0a //亮度控制寄存器 0-f
/*显示位控制寄存器***************************************/
/*0-第一位 1-第一、二位 ......7-全显示*****************/
#define scanlimit 0x0b
#define testreg 0x0f //测试模式 0 普通模式 1显示测试模式
#define dataaddr 0x01 //显示基址
/********************************************************/
#define set_0(X) X=0
#define set_1(X) X=1
#define timerh 0xee
#define timerl 0xff
sbit ADDR0 = P2^5 ;
sbit ADDR1 = P2^6 ;
sbit ADDR2 = P2^7 ;
#define SELECT_TLC549() ADDR0=1; ADDR1=1; ADDR2=0
#define SELECT_NONE() ADDR0=1; ADDR1=1; ADDR2=1
unsigned char seg[]={0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b}; // 0--9
unsigned char sega[]={0xfe,0xb0,0xed,0xf9,0xb3,0xdb,0xdf,0xf0,0xff,0xfb};
sbit TLC549_CLK=P2^3;
sbit TLC549_DATA=P2^4;
sbit clk=P1^0;
sbit load_cs=P1^1;
sbit din=P1^2;
unsigned char cs;
unsigned char dispram[4];
void initial(void);
void intimer(void);
void selectcs(void);
void select_none(void);
void delay(unsigned int time);
unsigned char TLC549_AD(void);
void max7219_data_send(uchar addr,uchar data_send);
unsigned char adcnt,advalue;
long adsum,addisplay;
float m,n;
void main()
{
P2=0xff;
initial();
intimer();
max7219_data_send(decodemode,0x00);
max7219_data_send(intensity,0x06);
max7219_data_send(scanlimit,0x03);
max7219_data_send(shutdown,0x01);
max7219_data_send(testreg,0x00);
dispram[0]=0;
dispram[1]=1;
dispram[2]=2;
dispram[3]=3;
TR1=1;
while(1)
{
advalue=TLC549_AD();
if(adcnt==255)
{
adcnt=0;
m=(float)adsum*5/65025;
n=m*m/8;
addisplay=(long)(n*1000);
dispram[0]=addisplay/1000;
dispram[1]=(addisplay%1000)/100;
dispram[2]=(addisplay%100)/10;
dispram[3]=addisplay%10;
adsum=0;
delay(1000);
}
else
{
adcnt++;
adsum+=advalue;
}
}
}
void initial(void)
{
set_0(clk);
set_0(load_cs);
set_0(din);
}
void max7219_data_send(uchar addr,uchar data_send)
{
uchar i,a;
set_0(load_cs);
for(i=0;i<4;i++)
{
set_0(clk);
set_1(clk);
}
addr=addr<<4;
for(i=0;i<4;i++)
{
set_0(clk);
a=addr&0x80;
if(a) set_1(din);
else set_0(din);
addr=addr<<1;
set_1(clk);
}
for(i=0;i<8;i++)
{
set_0(clk);
a=data_send&0x80;
if(a) set_1(din);
else set_0(din);
data_send=data_send<<1;
set_1(clk);
}
set_1(load_cs);
}
unsigned char TLC549_AD(void)
{
char i;
unsigned char rt=0;
TLC549_DATA=1;
TLC549_CLK=0;
SELECT_TLC549();
if(TLC549_DATA&1)
rt|=0x80;
TLC549_CLK=1;
TLC549_CLK=0;
for(i=6;i>=0;i--)
{
TLC549_CLK=1;
if(TLC549_DATA&1)
rt|=1<<i;
TLC549_CLK=0;
}
TLC549_CLK=1;
SELECT_NONE();
return rt;
}
void intimer(void)
{
cs=0;
dispram[0]=dispram[1]=dispram[2]=dispram[3]=0;
TMOD=0x10;
TH1=timerh;
TL1=timerl;
EA=1;
ET1=1;
}
void timer(void) interrupt 3 using 2
{
uchar m;
TH1=timerh;
TL1=timerl;
TF1=0;
if(cs==4)
cs=0;
m=dispram[cs];
if(cs==0)
max7219_data_send(cs+1,sega[m]);
else
max7219_data_send(cs+1,seg[m]);
cs++;
}
void delay(unsigned int time) // time*0.1ms延时
{
unsigned int i,j;
for(j=0;j<time;j++)
{
for(i=0;i<60;i++)
{;}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -