⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd.c

📁 这是一个课程设计---数字电压表基于MCS51和AD0809的源码
💻 C
字号:
#include<reg51.h>
#include"intrins.h"
#define uchar unsigned char
#define uint unsigned int
#define nop _nop_()
#define cycle 2000
#define cycle1 200

#define db0_db7 P1
static const uchar code table[]={'v','o','l','t','a','g','e','='};
static const uchar code str[]={"zhouxiao"};

uint data volt[6]={0x30,'.',0x30,0x30,0x30,0x30};
uchar xdata cs0809 _at_ 0xfeff;

sbit RS=P2^1;
sbit RW=P2^2;
sbit E=P2^3;
uint counti;
uchar temp;
unsigned char flag=0;
void init();
void write(uchar tempdata);
void writeddr(uchar tempdata);
void checkbusy();
void delay(uint n);
void display();
void displaya();
void main(void)
{
init();
displaya();
TMOD=0x11;
TH0=(65536-cycle)/256;
TL0=(65536-cycle)%256;
TH1=(65536-cycle1)/256;
TL1=(65536-cycle1)%256;
TCON=0x55;
IE=0x8a;
IP=0x04;
counti=0;
while(1);
display();
}

void display()
{  uint a;
write(0x8a);			//显示位置
for(a=0;a<6;a++)
writeddr(volt[a]);		//显示数值
}
void displaya()
{
uint b;
for(b=0;b<8;b++)
writeddr(table[b]);
display();				//显示数值
}

void delay(uint n)
{uint i;
for(i=0;i<n;i++)
{i=i;}
}
void init()
{
delay(500);
write(0x38);//显示模式5*7
write(0x01);//光标复位 
write(0x06);//光标右移
write(0x0C);
}

void write(uchar tempdata)
{checkbusy();
db0_db7=tempdata;
E=1;
nop;
E=0;
nop;

}
void writeddr(uchar tempdata)
{	 
checkbusy();
RS=1;
E=1;
db0_db7=tempdata;
nop;
E=0;
nop;
}
void checkbusy()
{
uchar temp;
RS=0; 
RW=1;
do
{db0_db7=0xff;
E=1;
delay(50);
nop;
temp=db0_db7;
E=0;
}while((temp&0x80)==0x80);
RW=0;
}
void service_int0() interrupt 1 using 2
{
static uchar s_counter;
if(++s_counter>=8)
{
flag++;
	if(flag<=16)
	{
		for(counti=0;counti<8;counti++)
		{
		write(0xc0+flag+counti);
		writeddr(str[counti]);
		temp=0xc0+flag+counti;
		}
 		if(flag>=1)
		{
		write(0xc0+flag);
		writeddr(0);
		}
	 }
	else
   {
   if(flag>=32)	
   for(counti=8;counti>=0;counti--)
		{
		write(0xc0+flag+counti-16);
		writeddr(str[counti]);
		}
	else  flag=0;
   }
}
TH0=(65536-cycle)/256;
TL0=(65536-cycle)%256;
}
void service_int1() interrupt 3 using 3
{uint vod; 
P2=0xFE;
P3=0xbf;
P0=0;
P3=0xff;
//cs0809=0;
IT1=1;
EX1=1;
TH1=(65536-cycle1)/256;
TL1=(65536-cycle1)%256;
}
void service_int2() interrupt 2 
{uint vod;
P2=0xFE;
P3=0x7f;
P0=0xff;
vod=P0;
P3=0xff;
//vod=cs0809;
vod*=196;
volt[0]=((vod/10000)+0x30);
volt[2]=(((vod%10000)/1000)+0x30);
volt[3]=((vod%1000)/100+0x30);
volt[4]=((vod%100)/10+0x30);
volt[5]=((vod%10)+0x30);
display();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -