本文包含原理图、PCB、源代码、封装库、中英文PDF等资源
您需要 登录 才可以下载或查看,没有账号?注册会员
×
实验板上的1602只显示“shu is 000",转动A/D的电位器显示还是000,换成数码管显示,转动A/D的电位器,数码管显示的数字会变换。哪位兄弟或高手帮小弟看看。下面是程序。
#include<reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar code table[]="shu is";
uchar shu,a,a1,a2,a3;
sbit lcden=P3^4; //1602的使能端
sbit lcdrs=P3^5; //1602的数据命令选择端
sbit adwr=P3^6;//ad0804的WR端口
sbit adrd=P3^7;//ad0804的RD端口
sbit dula=P2^6; //申明U1锁存器的锁存端,控制数码管显示的内容
sbit wela=P2^7; //申明U2锁存器的锁存端,控制哪一位数码管显示
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void write_com(uchar com)//1602写命令
{
lcdrs=0;
P0=com;
delayms(5);
lcden=1;
delayms(5);
lcden=0;
}
void write_data(uchar date)//1602写数据
{
lcdrs=1;
P0=date;
delayms(5);
lcden=1;
delayms(5);
lcden=0;
}
void init()
{
dula=0;//关数码管
wela=0;//关数码管
lcden=0;
write_com(0x38);
write_com(0x06);
write_com(0x0c);
write_com(0x01);
}
void display(uint shu)
{
uchar a1,a2,a3;
a1=shu/100;
a2=shu%100/10;
a3=shu%10;
write_com(0x80+0x08);
write_data(a1+0x30);
delayms(1);
write_com(0x80+0x09);
write_data(a2+0x30);
delayms(1);
write_com(0x80+0x0a);
write_data(a3+0x30);
delayms(1);
}
void display1()
{
uchar num;
write_com(0x80);
for(num=0;num<6;num++)
{
write_data(table[num]);
delayms(5);
}
}
void main()
{
wela=1;
P0=0x7f;//置ad0804的片选信号cs为0,它连接在U2锁存器的Q7输出端
wela=0;
init();
while(1)
{
adwr=1;
_nop_();
adwr=0;
_nop_();
adwr=1;
for(a=10;a>0;a--)//为了延长转换时间,所以把显示放在这里
{
display1();
display();
}
P1=0xff;
adrd=1;
_nop_();
adrd=0;
_nop_();
shu=P1;//A/D数据读取赋给P1口
adrd=1;
a1=shu/100;
a2=shu%100/10;
a3=shu%10;
}
} |