数字电压表课设报告

  • 格式:docx
  • 大小:113.58 KB
  • 文档页数:8

.专业整理.

.学习帮手.

附录:程序及仿真图

1.程序如下

#in elude

sbit P2_0=P2A0;

sbit ST=P3A6; //

sbit OE=P3A7;

sbit EOC=P3A3; 启动控制端

//输出允许控制端

//转换结束检测

code char CgramData0[]={0x08,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0x02}; // 年

code char CgramData1[]={0x0f,0x09,0x0f,0x09,0x0f,0x09,0x11,0x00}; // 月

code char CgramData2[]={0x1f,0x11,0x11,0x1f,0x11,0x11,0x1f,0x00}; // 日

code char CgramData3[]={0x00,0x04,0x1f,0x0a,0x04,0x0a,0x11,0x00}; // 刘

code char CgramData4[]={0x00,0x04,0x14,0x14,0x14,0x04,0x0c,0x00}; //

code char CgramData5[]={0x08,0x1e,0x1a,0x16,0x1a,0x16,0x1e,0x00}; // 自

code char CgramData6[]={0x04,0x04,0x1F,0x0E,0x15,0x1F,0x04,0x00}; // 本

un sig ned char Y[6],getdata1=0,i,j; un sig ned int getdata=0;

uchar Voltage[]="Voltage=1.541";

uchar zifu[]="liucha ngyin";

uchar zifu1[]="Number:200501167";

un sig ned int k=0;

un sig ned long V;

un sig ned char coun t=0;

bit biaozhi=0; //定时用

//动态换屏用

void delay10us()〃 延时,增加显示稳定性

{ for(i=0;i<10;i++);

}

void xia nshi() // 显示函数

{

V=getdata*500000/255;

for(i=0;i<6;i++)//LCD 显示数操作

{Y[i]=V%10;

V/=10;

} .专业整理.

.学习帮手.

//LCD1602 显示

Voltage[8]=Y[5]+48;

Voltage[9]='.';

Voltage[10]=Y[4]+48;

Voltage[11]=Y[3]+48;

Voltage[12]=Y[2]+48;

Voltage[13]='\0:

display_str(0x40+0x80,Voltage);

delay10us();

getdata=0;

} void mai n(void)

{

lcd_ini t();

display_str(0x80,zifu); //

P2_0=0; 〃P2_0 —直为低,便于用 P3_6和P3_7控制启动AD和读取数据

OE=1; // 不允许读取数据

TMOD=0x10; // 定时器0选用方式1

TH1=0x3C; //

TL仁 0xB0; //50ms

TR1=1; // 启动T1计时

ET仁 1; // 定时器0中断使能

EA=1; // 开中断

P0=0xf8; //

delay10us(); 选择通道1

ST=1;ST=0;ST=1; // 启动 AD转换 while(1)

{

}

}

void tl(void) in terrupt 3 using 0 // 定时器 1 中断执行部分

{

coun t++;

if(co un t==5)

{

if(biaozhi==0) // 显示:"自本 10504 0501167" 第一行显示字符串

EX1=1; //外部中断1使能

IT1=1; //外部中断1为边沿触发 .专业整理.

.学习帮手.

{

write_cgram(0x40,CgramData5); display_cgram(0x80,0x00);

write_cgram(0x48,CgramData6);

display_cgram(0x81,0x01);

display_str(0x82,"10504 0501167"); // 第一行显示字符串

}

if(biaozhi==1) // 显示:"2008 年 07 月 10 日 文

{

display_str(0x80,"2008");

write_cgram(0x60,CgramData0); display_cgram(0x84,0x04);

display_str(0x85,"07");

write_cgram(0x78,CgramData1); display_cgram(0x87,0x07);

display_str(0x88,"10 ");

write_cgram(0x40,CgramData2);

display_cgram(0x8A,0x00);

write_cgram(0x50,CgramData3);

display_cgram(0x8C,0x02);

write_cgram(0x58,CgramData4);

display_cgram(0x8D,0x03);

}

biaozhi=~biaozhi;

coun t=0;

}

TH1=0x3C; //

TL1=0xB0; //50ms

TR1=1; // 启动T1计时

P1= ~P1;.专业整理.

.学习帮手.

ST=1;ST=0;ST=1;〃 重新启动 AD转换 }

//*************************************

//led 头文件

//*************************************

#in clude

#in clude

#in elude

#defi ne lcd_data P0 // 定义端口

#defi ne uchar un sig ned char

#defi ne uint un sig ned int

sbit RS=P2A1;

sbit RW=P2A2;

sbit E=P2A3;

sbit BF=P0A7;

//***************************************

//延时函数

//***************************************

void delay( uint i)

{ while(i--);

} //***************************************

//写控制字 void in tl(void) in terrupt 2 using 0

{

PO=Oxff;

OE=0;

getdata 仁PO;

OE=1;

getdata+=getdata1;//10

k++;

if(k==10)

{ EX仁 0; //外部中断 1执行部分

//

//

//

// 传输数据使能 得到转换数据 不允许传输数据

次求和取平均值

getdata=getdata/10; //

xia nshi(); //

k=0;

EX仁 1;

}

P0=0xf8;〃 选择通道 // 关闭外部中断1

取平均值

利用LCD显示电压值

允许外部中断1 .专业整理.

.学习帮手.

〃***************************************

void write_struct(uchar temp)

{

E=0; delay(IOO);

〃while(BF==1);

RW=0;

RS=0; lcd_data=temp; delay(3);

E=1;

delay(3);

E=0;

}

〃**************************************

//写数据

〃**************************************

void write_data(uchar temp)

{

delay(100);

〃while(BF==1);

E=0;

RS=1;

RW=0;

lcd_data=temp;

E=1;

delay(3);

E=0;

}

〃***************************************

//lcd 初始化

〃***************************************

void lcd」n it()

**************************************

//向CGRA写入数据

**************************************

void write_cgra m(un sig ned char adress, un sig ned char

*p)

{ {

write_struct(0x38); //

write_struct(0x08); //

write_struct(0x01); //

write_struct(0x06); //

write_struct(OxOc); // } 设置接口 DB宽度(8位)和LCM显示行数(2行)

执行清屏操作

设置光标为加1模式

设置光标为移位模式

//*

//*