实训课设:数字电压表

显示是两排满方格,字符显示不出来,未解决

代码附在图后

求指点一下

853a47260e4141d5a396116c495d4a8f.png

以上是仿真图 

9a48c2e154de432bbdd29ae0dcbee325.png

实验显示结果

代码如下:

#include <reg51.h>
sbit start=P3^0;
sbit eoc=P3^1;
sbit oe=P3^2;
sbit RS=P3^3;
sbit RW=P3^4;
sbit E=P3^5;
unsigned int vol=0;
unsigned char arr[]={"0123456789"};
unsigned char str[]={"VOLTAGE:"};

void delay(unsigned int n)//延时函数
{
  unsigned int i,j;
    for(i=0;i<n;i++)
    {
      for(j=0;j<120;j++);
    }
}

void adc()
{
  start=0; // 关闭A/D转换启动信号
  start=1; // 打开A/D转换启动信号
  delay(5);
  start=0; // 关闭A/D转换启动信号
  while(eoc!=1);//判断A/D转换结束信号是否为1,1则转换完成,输出
    oe=1;   //数据输出允许信号
    vol=P2;//读取数据结果
    oe=0;//数据输出允许信号
}

void writecom(unsigned char com)//写命令函数
{
  RS=0; //  RS:数据/命令选择端
    RW=0;//  R/W :读/写选择端 
    E=0; //  使能端:下降沿有效
    delay(5);
    P1=com;
    E=1;
    E=0;
}

void writedat(unsigned char dat)//写数据函数
{
   RS=1; //  RS:数据/命令选择端
    RW=0;//  R/W :读/写选择端 
    E=0; //  使能端:下降沿有效
    delay(5);
    P1=dat;
    E=1;
    E=0;
}

void initlcd()//初始化LCD1602
{
    writecom(0x38); //0x38;设置16×2显示
    writecom(0x0c); //0x0C:设置开显示,不显示光标
    writecom(0x06); //0x06:写一个字符后地址指针加1
    writecom(0x01); //0x01:显示清0,数据指针清0
}

void display()//显示函数
{
    unsigned int i=0;
    unsigned char temp0=0,temp1=0,temp2=0,temp3=0;
    vol=((vol*100)/51)*4; //  255/5=51
    temp0=vol/1000;
    temp1=vol%1000/100;
    temp2=(vol%100)/10;
    temp3=vol%10;
    
  writecom(0x80);//0x80:LCD第一行的起始地址
    delay(5);
    for(i=0;i<8;i++)//显示字符串 VOLTAGE:
    {
      writedat(str[i]);
        delay(5);
    }
    
    writecom(0x80+0x40+8);// 0x80+0x40+8 LCD第二行的起始地址+8个字符
  delay(5);
  writedat(arr[temp0]);
    delay(5);
    writedat(arr[temp1]);
     delay(5);
    writedat('.');
  delay(5);
  writedat(arr[temp2]);
    delay(5);
  writedat(arr[temp3]);
  delay(5);
  writedat('V');
  delay(5);
}

void main()
{
    initlcd();
  while(1)
    {
      adc();
        display();
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值