您的位置 首页 技术

51单片机1602液晶程序

#includereg52.h>#defineLcd_DataP0sbitRS=P2^0;sbitRW=P2^1;sbitE=P2^2;sbitBusy=P0^7;sbitk1=P1^0;sbi

#include

#define Lcd_Data P0
sbit RS=P2^0;
sbit RW=P2^1;
sbit E=P2^2;
sbit Busy=P0^7;
sbit k1=P1^0;
sbit k2=P1^1;
sbit k3=P1^2;
sbit k4=P1^3;
sbit buzzer=P3^7;
unsigned int hour,min,second,day,month,year; ////////界说的几个时刻
unsigned char code Time[] = {“Time: “};////用于显现
unsigned char code num[] = {“0123456789ABCDEF”};/////////////用于液晶显现
unsigned char code haha[]={“^_^”};
unsigned char code middle[]={“:”};
unsigned int numberflag;
unsigned int number;
unsigned code heart[]={0x03,0x07,0x0f,0x1f,0x1f,0x1f,0x1f,0x1f,
0x18,0x1E,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,
0x07,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,
0x10,0x18,0x1c,0x1E,0x1E,0x1E,0x1E,0x1E,
0x0f,0x07,0x03,0x01,0x00,0x00,0x00,0x00,
0x1f,0x1f,0x1f,0x1f,0x1f,0x0f,0x07,0x01,
0x1f,0x1f,0x1f,0x1f,0x1f,0x1c,0x18,0x00,
0x1c,0x18,0x10,0x00,0x00,0x00,0x00,0x00};//心图画
unsigned int t0_1S;//界说0.1S变量
unsigned char keyvalue;//界说键值
void delay(unsigned int time)/////////////////////////////////////////////延时程序
{
while(time–);
}
void Delay_1ms(unsigned char t)///////////////////////////准确延时子程序,延时 1MS*t S
{
unsigned char a;
while(–t != 0)
{
for(a = 0; a < 125; a++);
}
}
////////////////////////////////////////////////
///////////////////////////////////////////////////
//////////////////////////////////////////////////液晶的程序
void Read_Busy(void)
{
do{ Lcd_Data=0xff;
RS=0;
RW=1;
E=0;
delay(2);
E=1;}while(Busy);
}
void Write_Comn(unsigned char comn)
{
Lcd_Data=comn;
RS=0;
RW=0;
E=0;
Read_Busy();
E=1;
}
void Write_Data(unsigned char Lcddata)
{
Lcd_Data=Lcddata;
RS=1;
RW=0;
E=0;
Read_Busy();
E=1;

}
void init()
{
Write_Comn(0x01);///清显现
delay(50);
Write_Comn(0x02);//光标坐落左上方
Write_Comn(0x38);//5*8点阵 8位2行
Write_Comn(0x06);// 文字不动,光标右移
Write_Comn(0x0f);///光标业绩
}
////////////////////////////////////////////////////
//////////////////////////////////////////////
////////////////////////////////////////////////////
///////////////////////////////////////////以上为lcd的程序;
/////////////////////////////////////////以下为键盘扫描的程序
void KEY4X4_scan(void)
{
keyvalue=0x00;//无按键时回来Ox00
P1=0xFE;//扫描第1行
delay(1);
if((P1&0xF0)!=0xF0)
keyvalue=(P1>>4)|0x10;//回来键值
P1=0xFD;//扫描第2行
delay(1);
if((P1&0xF0)!=0xF0)
keyvalue=(P1>>4)|0x20;//回来键值
P1=0xFB;//扫描第3行
delay(1);
if((P1&0xF0)!=0xF0)
keyvalue=(P1>>4)|0x30;//回来键值
P1=0xF7;//扫描第4行
delay(1);
if((P1&0xF0)!=0xF0)
keyvalue=(P1>>4)|0x40;//回来键值
//return keyvalue;
}
//////////////////////////////////////////////////
/////////////////////////////////////////////////
///////////////////////////////////////////////秒表程序
void seconddisplay(void)//显现时刻
{
unsigned char aa = 0, bb = 0, cc = 0, dd = 0,ee = 0;//界说时刻各个位
if(t0_1S>60000)t0_1S=0;
aa=t0_1S/10000;
bb=t0_1S%10000/1000;
cc=t0_1S%1000/100;
dd=t0_1S%100/10;
ee=t0_1S%10;
Write_Comn(0xc9);
Write_Data(num[aa]);
Write_Data(num[bb]);
Write_Data(num[cc]);
Write_Data( num[dd] );
Write_Data(.);
Write_Data(num[ee]);
Write_Data(S);

}

/////////////////////////////////////////////////////////////秒表
void mysecond()
{ unsigned int i;
init();//初始化液晶
Write_Comn(0x01);//清显现
k1=1;k2=1;
t0_1S=0;
Write_Comn(0x80);

for(i=0;i<16;i++)
{
Write_Data( Time[i] );//显现time字样
}
run:
seconddisplay();
if(k1==0)
{
while(1)
{
Delay_1ms(100);//延时0.1S
t0_1S++;
seconddisplay();
if(k2==0)
{
while(1)
{
if(k1==0)break;
if(k3==0){t0_1S=0;
goto over;
}
}
}
}
}
goto run;
over:
t0_1S=0;

}
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
void showheart()
{
unsigned int i; // char m=0;
init();
Write_Comn(0x40); //设定CGRAM地址
for(i=0;i<64;i++) //将心型代码写入CGRAM中
{
Write_Data(heart[i]);
}
Write_Comn(0x85); //设定上排的显现方位
for(i=0;i<4;i++) //显现心型图画的上半部分
{
Write_Data(i);
}
Write_Comn(0xc5); //将显现坐标转移到下排和上排相对应的当地
for(i=4;i<8;i++) //显现心型图画的下半部分
{
Write_Data(i);
}

}
//////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////
/////////////////////////////////////////////
////////////////////////////////////////////////
///////////////////////////////////定时器中止的初始化
void init_int()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
ET0=1;
TR0=1;
EA=1;
}
void edit(unsigned int t)////////////////////////////对月,天 时 分 秒的核算
{
unsigned int a,b;
a=t/10;
b=t%10;
Write_Data(num[a]);
Write_Data(num[b]);
}
void showmiddle(unsigned int x)///////////////////////////////显现冒号的函数
{ Write_Comn(x);
Write_Data(middle[0]);
}
void showhaha(unsigned int x)//////////////////////////////////显现笑脸的函数
{unsigned int i;
Write_Comn(x);
for(i=0;i<3;i++)
Write_Data(haha[i]);
}
void showtime()
{unsigned int a,b,c,d;

a=year/1000;
b=(year%1000)/100;
c=((year%1000)%100)/10;
d=year%1000%100%10;
init();
showhaha(0x80); /////////////////////////////////显现笑脸
Write_Comn(0x80+3);
Write_Data(num[a]);
Write_Data(num[b]);
Write_Data(num[c]);
Write_Data(num[d]);

showmiddle(0x80+7); ////////////////////////////显现冒号
Write_Comn(0x80+8);
edit(month);

showmiddle(0x80+10); ////////////////////////////显现冒号
Write_Comn(0x80+11);
edit(day);
showhaha(0x80+13);///////////////////////////////////////显现笑脸
showhaha(0xc0+1); //////////////////////////////////////显现笑脸
Write_Comn(0xc0+4);
edit(hour);

showmiddle(0xc0+6); ////////////////////////////显现冒号
Write_Comn(0xc0+7);
edit(min);

showmiddle(0xc0+9); /////////////////////////////////显现冒号
Write_Comn(0xc0+10);
edit(second);
showhaha(0xc0+12);////////////////////////////////显现笑脸
}
//////////////////////////////////
/////////////////////////////////////
///////////////////////////////键盘上显现数字的小函数
void shownumber()
{
numberflag=0;
Write_Comn(0x80+number-1);
Write_Data(num[number]);
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/jishu/265408.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部