📄 8路数字电压表的设计.c
字号:
#include<reg51.h>
#include<DEFINE.h>
#include<intrins.h>
void delay1(unsigned int z)
{
unsigned int x ;
for(x=z;x>0;x--);
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com) //以后,养成习惯先把数据或命令发往端口,再控制时序
{
P1=com; //送命令码
lcdrs=0; //RS拉低,写命令状态 。RW接地,恒为低,处于写状态
delay(5); //根据时序图,要加相应的延时,芯片才有时间能读到相应的操作
lcden=1; //使能端E的高脉冲
delay(5);// 使能端E的高脉冲
lcden=0;// 使能端E的高脉冲
}
void write_date(uchar date) //以后,养成习惯先把数据或命令发往端口,再控制时序
{
P1=date;//送数据
lcdrs=1;//RS置高,写数据状态 。RW接地,恒为低,处于写状态
delay(5);
lcden=1;//使能端E的高脉冲
delay(5);// 使能端E的高脉冲
lcden=0;// 使能端E的高脉冲
}
void init()
{
flag=0;
}
//***************************************************
// LCD初始化子程序
//*************************************************
void LCD_init()
{
lcden=0;
write_com(0x38);//显示模式设置 ,16*2显示,5*7点阵,8位数据接口
write_com(0x0C);//开显示,设置光标是否显示和闪动 (见指令表)
write_com(0x06);//设置写一个数后,光标加一还是减一。和整屏是否移动 ,为0x06整屏不移动
write_com(0x01);//清屏幕
write_com(0x80);
for(i=0;i<12;i++)
{
write_date(table[i]);
}
}
void kou_xuan()
{
if(flag==0)
{
adc0808_add_a=0;
adc0808_add_b=0;
adc0808_add_c=0;
}
if(flag==1)
{
adc0808_add_a=1;
adc0808_add_b=0;
adc0808_add_c=0;
}
if(flag==2)
{
adc0808_add_a=0;
adc0808_add_b=1;
adc0808_add_c=0;
}
if(flag==3)
{
adc0808_add_a=1;
adc0808_add_b=1;
adc0808_add_c=0;
}
if(flag==4)
{
adc0808_add_a=0;
adc0808_add_b=0;
adc0808_add_c=1;
}
if(flag==5)
{
adc0808_add_a=1;
adc0808_add_b=0;
adc0808_add_c=1;
}
if(flag==6)
{
adc0808_add_a=0;
adc0808_add_b=1;
adc0808_add_c=1;
}
if(flag==7)
{
adc0808_add_a=1;
adc0808_add_b=1;
adc0808_add_c=1;
}
}
void datedeal()
{
wei1=temp/16;
wei2=temp%16;
D=wei1*16+wei2;
sum=(D*Vref*1000)/N8;
sum=sum+5;
if(sum<1000)
{
w2=sum/100;
w3=sum%100/10;
table1[0]=table2[0];
table1[1]=table2[10];
table1[2]=table2[w2];
table1[3]=table2[w3];
}
else
{
w1=sum/1000;
w2=sum%1000/100;
w3=sum%100/10;
table1[0]=table2[w1];
table1[1]=table2[10];
table1[2]=table2[w2];
table1[3]=table2[w3];
}
//w1=(sum/1000);
//sum=sum+0.005;
}
//*********************************************************
// 开始AD转换子程序
//**********************************************************
void AD_0808()
{
adc0808_oe=0;
adc0808_eoc=1;
adc0808_ale=0;
adc0808_start=0;
adc0808_add_a=0;
adc0808_add_b=0;
adc0808_add_c=0;
// kou_xuan();
adc0808_ale=1;
adc0808_start=1;
adc0808_ale=0;
_nop_();
_nop_();
adc0808_start=0;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
adc0808_eoc=0;
delay1(9);
adc0808_eoc=1;
adc0808_oe=1;
//flag++;
//if(flag==7)
// flag=0;
delay(100);
}
//*********************************************************
// lcd 显示子程序
//*******************************************************
void LCD_display()
{
write_com(0x80+0x40);
for(i=0;i<5;i++)
{
write_date(table1[i]);
}
}
//***************************************************
// 主程序
//*************************************************
void main()
{
LCD_init();
while(1)
{
AD_0808();
P0=0xff;
temp=P0;
datedeal();
LCD_display();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -