STC89C51时钟 1602显示

/**********************************************************************************************
* 描述:时间显示器
*功能按键:STC12C5A60S2右边方向键   右键为功能键  (按下选择年月日时分秒的设置)  
左键为退出功能键 上键为加一键 下键为减一键
**********************************************************************************************/


#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit BUZZ=P1^6; //定义蜂鸣器端,按键释放和整点响
sbit ENLCD=P1^5; //定义1602液晶LCDEN端,使能信号
sbit ADDR0=P1^0; //定义1602液晶RS端,数据/命令选择端(H/L)
sbit ADDR1=P1^1; //定义1602液晶RW端,读/写选择端(H/L)
uchar code keycode[] = {0x11,0x12,0x14,0x18,0x21,0x22,0x24,0x28,
0x41,0x42,0x44,0x48,0x81,0x82,0x84,0x88};//键位置
uchar yue,ri,shi,fen,miao,week,nian,flag,count; 
uchar code table[7][3]={"MON","TUE","WED","THU","FRI","SAT","SUN"};


//数字
//char code dat[]={"0123456789"};


 /***********毫秒级延时函数**********/
void delay(uint x) 
{
uint y,z;
for(y=x;y>0;y--)
for(z=110;z>0;z--); 
}
/***********蜂鸣器发声函数**********/
void di(uint dd) 
{
BUZZ=0;
delay(dd);
BUZZ=1;
}
/***********按键判断函数**********/
 uchar key_scan()
{uchar i,k,kcode,scode;
 P2 = 0xf0;
if((P2&0xf0)!=0xf0)
{delay(500);
if((P2&0xf0)!=0xf0)
{scode = 0xfe;
for(k=0;k<4;k++)
{P2 = scode;
if((P2&0xf0)!=0xf0)
{kcode = ~P2;
for(i=0;i<16;i++)
if(kcode == keycode[i])
  return i;
}
else scode =_crol_(scode,1);
}
}
 

return(16);
}


 /***********LCD1602忙等待**********/ 
uchar busycheck()
{uchar s;
ADDR0=0;
ADDR1=1;
ENLCD=1;
delay(1);
s=P0;
ENLCD=0;
return s;
}


 /***********液晶写命令函数**********/
void write_com(uchar com) 
{
while((busycheck()&0x80)==0x80);
ADDR0=0;
ADDR1=0;
ENLCD=0;
P0=com;
delay(5);
ENLCD=1;
delay(5);
ENLCD=0;
}


/***********液晶写数据函数**********/
void write_date(uchar date) 
{
while((busycheck()&0x80)==0x80);
ADDR0=1;
ADDR1=0; 
ENLCD=0;
P0=date;
delay(5);
ENLCD=1;
delay(5);
ENLCD=0;
}


/***********写年函数**********/
void write_nian(uchar add,uchar date)reentrant  //reentrant定义为可重入函数,允许被递归调用
{
uint bai,shi,ge;
bai=date/100;
shi=date%100/10;
ge=date%100%10;
write_com(0x80+add); //设置显示位置 
write_date(0x30+bai); //0~9对应的字符码是0x30~0x39
write_date(0x30+shi);
write_date(0x30+ge);
/*write_date(dat[bai]);
write_date(dat[shi]);
write_date(dat[ge]);*/
} <
基于单片机的的LCD1602显示,C语言编程。#include "lcd.h" void Lcd1602_Delay1ms(uint c) { uchar a,b; for (; c>0; c--) { for (b=199;b>0;b--) { for(a=1;a>0;a--); } } } /******************************************************************************* * 函 数 名 : LcdWriteCom * 函数功能 : 写命令 * 输 入 : com * 输 出 : 无 *******************************************************************************/ void LcdWriteCom(uchar com) { LCD1602_E = 0; LCD1602_RS = 0; LCD1602_RW = 0; LCD1602_DATAPINS = com; Lcd1602_Delay1ms(1); LCD1602_E = 1; Lcd1602_Delay1ms(5); LCD1602_E = 0; } /******************************************************************************* * 函 数 名 : LcdWriteData * 函数功能 : 写数据 * 输 入 : dat * 输 出 : 无 *******************************************************************************/ void LcdWriteData(uchar dat) { LCD1602_E = 0; LCD1602_RS = 1; LCD1602_RW = 0; LCD1602_DATAPINS = dat; Lcd1602_Delay1ms(1); LCD1602_E = 1; Lcd1602_Delay1ms(5); LCD1602_E = 0; } /******************************************************************************* * 函 数 名 : LcdInit() * 函数功能 : 初始化LCD屏 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void LcdInit() { LcdWriteCom(0x38); //开显示 LcdWriteCom(0x0c); //开显示显示光标 LcdWriteCom(0x06); //写一个指针加1 LcdWriteCom(0x01); //清屏 LcdWriteCom(0x80); //设置数据指针起点 } /******************************************************************************* * 函 数 名 : LcdIdiszhu() * 函数功能 : 主屏显示 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void lcddiszhu() { uchar i; uchar lcd1[]="Model i ii iii"; uchar lcd2[]="Choose 1 2 3 "; LcdWriteCom(0x80); for(i=0;i<15;i++) { LcdWriteData(lcd1[i]); } LcdWriteCom(0x80+0x40); fo
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值