lcd12864万年历程序

lcd12864带中文字库的128x64 是一种具有4 位/8 位并行、2 线或3 线串行多种接口方式,内部含有国标一级、二级简体 中文字库的点阵图形液晶显示模块;其显示分辨率为128×64, 内置8192 个16*16 点汉字,和128 个16*8 点ascii 字符 集。利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。可以显示8×4 行16×16 点 阵的汉字。 也可完成图形显示。低电压低功耗是其又一显著特点。
lcd12864万年历程序
#include《reg52.h》#include《intrins.h》#include《math.h》
////////////////////////////////////////ds18b20#defineucharunsignedchar#defineuintunsignedintsbitdq=p1^0;
//定义ds18b20的单总线
#definelcd_busp0
sbitlcd_rs=p2^7;//数据/命令选择sbitlcd_rw=p2^6;//读写控制sbitlcd_en=p2^5;//片选信号
#definelcd_datap0//8bit数据线#definelow0#definehigh1
//初始化指令
#defineclear_screen0x01//清屏指令:清屏且ac值为00h#defineac_init0x02//将ac设置为00h。且游标移到原点位置
#definecurse_add0x06//设定游标移到方向及图像整体移动方向(默认游标右移,图像整体不动)
#definefun_mode0x30//工作模式:8位基本指令集
#definedisplay_on0x0c//显示开,显示游标,且游标位置反白#definedisplay_off0x08//显示关
#definecurse_dir0x14//游标向右移动:ac=ac+1
#defineset_cg_ac0x40//设置ac,范围为:00h~3fh
#defineset_dd_ac0x80
#definefun_modek0x36//扩展指令集,8位指令
#definex1address0x80//上半屏x轴起始地址
#definex2address0x88//下半屏x轴起始地址
#defineyaddress0x80//y轴起始地址
#defineset_column0x40#defineset_page0xb8
ucharcodeshu[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
ucharcodexingqi[]=“星期”;
ucharcodehanzishu[]=“一二三四五六日”;unsignedchartempdata=0;doubleds18b20data;uintjiemian=0;
//////////////////////////////////////////ds1302sbitds1302_rst=p1^4;sbitds1302_io=p1^3;sbitds1302_sck=p1^2;
unsignedchartable[]={0x00,0x18,0x0c,0x15,0x06,0x01,0x0a};//0s24min12hour14ri5yue5zhou2010nianunsignedchardatatable1[7];
//ucharcodetable2[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};ucharcodeshuzi[]={
0x00,
0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,};
unsignedcharaa,bb;
ucharmiaoge,miaoshi,fenge,fenshi,shige,shishi,rige,rishi,yuege,yueshi,zhou,niange,nianshi;
ucharshezhinum=0;
//unsignedcharshi,ge;
////////////////////////////////////////////////键盘扫描
sbitkey_mnue=p3^7;
sbitkey_jia=p2^0;
sbitkey_jian=p2^1;
sbitkey_enter=p2^2;
ucharkey_number=0;
//intnian,yue,ri,shi,fen;
/////////////////////////////////////////////////红外
sbithw_irq=p3^2;//定义38khz一体化红外接收头与
cpu的连接unsignedchar
dt;
staticunsignedchardataircode[3],ircon,ircon2;
//////////////////////////////////////////////////蜂鸣器sbitbeep=p1^1;
/********************************************************************************************
*函数名称:ds18b20_delay()
*功能:ds18b20软件延时专用
*入口参数:count延时参数,值越大,延时越长
*出口参数:无
*********************************************************************************************/
voidds18b20_delay(uintcount)//延时函数{
while(count--);}
/********************************************************************************************
*函数名称:ds18b20_init()*功能:ds18b20初始化*入口参数:无
*出口参数:返回值为1则初始化成功*返回值为0则初始化失败
*********************************************************************************************/
uchards18b20_init(void){
ucharx=0;
dq=1;
//dq复位ds18b20_delay(8);
//稍做延时
dq=0;
//单片机将dq拉低ds18b20_delay(80);//精确延时,大于480usdq=1;
//拉高总线ds18b20_delay(14);//稍做延时后
x=dq;//若x=0则初始化成功,若x=1则
初始化失败
ds18b20_delay(20);
return(~x);}
/********************************************************************************************
*函数名称:ds18b20_read1byte()*功能:从ds18b20读一个字节*入口参数:无
*出口参数:从ds18b20读出的一个字节
*********************************************************************************************/
uchards18b20_read1byte(void){
uchari=0;uchardat=0;for(i=8;i》0;i--){
dq=0;//给脉冲信号dat》》=1;dq=1;
//给脉冲信号
if(dq)dat|=0x80;ds18b20_delay(4);}
return(dat);}
/********************************************************************************************
*函数名称:ds18b20_write1byte()
*功能:向ds18b20写一个字节
*入口参数:dat要写入ds18b20的一字节数据
*出口参数:无
*********************************************************************************************/
voidds18b20_write1byte(uchardat){
uchari=0;
for(i=8;i》0;i--){
dq=0;
dq=dat&0x01;ds18b20_delay(5);
dq=1;dat》》=1;}}
/********************************************************************************************
*函数名称:read_disp_temperature()*功能:读取并显示温度*入口参数:无*出口参数:无
*********************************************************************************************/
doubleread_disp_temperature(void){
uinta=0,b=0,c=0,d=0,e=0,t=0;doublett=0;
ds18b20_init();
ds18b20_write1byte(0xcc);//跳过读序号列号的操作
ds18b20_write1byte(0x44);//启动温度转换
ds18b20_init();
ds18b20_write1byte(0xcc);//跳过读序号列号的操作
ds18b20_write1byte(0xbe);//读取温度寄存器
a=ds18b20_read1byte();
b=ds18b20_read1byte();
t=b;
t《《=8
t=t|a;
//tt=t*0.0625;
returnt;
}
//*****************************************************************//函数名称:delay(uintt)延时函数。对于12m晶振大约延时1ms//入口参数:t//出口参数:无
//*****************************************************************voiddelay(uintt){
uinti;while(t--){
for(i=0;i《125;i++);}}
////////////////////////////////////////////////////////////////蜂鸣器鸣叫voidfm(){
beep=0;delay(100);beep=1;}
//*****************************************************************//函数名称:write_cmd(uintlcd_cmd)写指令//入口参数:lcd_cmd//返回参数:无
//*****************************************************************voidwritecmd12864(ucharlcd_cmd){
lcd_rs=low;lcd_rw=low;lcd_en=high;
lcd_data=lcd_cmd;lcd_en=low;}
//****************************************************************
//函数名称:write_data(uintlcd_data)写数据
//入口参数:current_data
//返回参数:无
//****************************************************************
voidwritedata12864(ucharlcd_data)
{
lcd_rs=high;
lcd_rw=low;
lcd_en=high;
lcd_data=lcd_data;
lcd_en=low;}
/****************************************************************
函数名称:write12864(uint)写数据
入口参数:cmd,data
返回参数:无
****************************************************************/
voidwrite12864(ucharlcd_cmd,ucharlcd_data)
{
writecmd12864(lcd_cmd);
writedata12864(lcd_data);
}
//****************************************************************
//函数名称:readbusy()判忙
//入口参数:无
//返回参数:
“1”忙;
“0”不忙
//****************************************************************
voidreadbusy(void)
{
uchari=5;
while(i--);}
/****************************************************************
函数名称:lcdinit()初始化
入口参数:无
返回参数:无
****************************************************************/
voidlcdinit()
{
delay(50);
writecmd12864(fun_mode);delay(1);
//writecmd12864(fun_mode);//delay(1);
writecmd12864(display_on);delay(1);
//writecmd12864(ac_init);//delay(1);
writecmd12864(clear_screen);delay(20);
writecmd12864(curse_add);delay(1);}
/****************************************************************
函数名称:lcdclear()清屏
入口参数:无
返回参数:无
****************************************************************/voidlcdclear(void){
readbusy();
writecmd12864(clear_screen);delay(3);}
voidwrite_date(uchardate){
lcd_rs=1;
lcd_rw=0;
lcd_en=0;
p0=date;delay(5);
lcd_en=1;delay(5);
lcd_en=0;
}
voidinput1byte(unsignedchardate)
{
unsignedchari;for(i=0;i《8;i++)
{
ds1302_io=date&0x01;ds1302_sck=0;ds1302_sck=1;date》》=1;}}
unsignedcharread1byte(){
unsignedchari,date=0;for(i=0;i《8;i++){
date》》=1;
ds1302_sck=1;ds1302_sck=0;ds1302_io=1;
if(ds1302_io)date=date|0x80;}
returndate;}
voidwrite1302(unsignedcharaddress,unsignedchardate){
ds1302_rst=0;ds1302_sck=0;ds1302_rst=1;input1byte(address);input1byte(date);ds1302_rst=0;ds1302_sck=1;}
unsignedcharread1302(unsignedcharaddress){
unsignedcharucdat;
ds1302_rst=0;
ds1302_sck=0;
ds1302_rst=1;
input1byte(address);
ucdat=read1byte();
ds1302_rst=0;
ds1302_sck=1;
returnucdat;
}
voidset1302(unsignedcharaddress,unsignedchartable[],unsignedcharn){
unsignedchari;
write1302(0x8e,0x00);for(i=0;i《n;i++){
write1302(address,table[i]);address+=2;}
write1302(0x8e,0x80);}
voidread1302xulie(unsignedcharaddress,unsignedcharn){
unsignedchari;for(i=0;i《n;i++){
table1[i]=read1302(address);address+=2;}}
voidinit1302(){
ds1302_rst=0;ds1302_sck=0;
write1302(0x8e,0x00);//取消写保护
write1302(0x90,0x00);//清零涓流充电寄存器
}
voidchuli()
{
unsignedcharaa,bb,i;
for(i=0;i《7;i++)
{
aa=table[i]/10;
bb=table[i]%10;
table[i]=(aa《《4)|bb;
}
}
voidchuli2(unsignedcharz){
aa=table1[z]&0x0f;
//年
bb=(table1[z]&0xf0)》》4;table1[z]=bb*10+aa;}
voidjiashijian(){
switch(key_number)
{
case0:break;case1:table1[6]++;
//if(table1[6]==10)table1[6]=5;
write1302(0x8e,0x00);
write1302(0x8c,table[6]);
write1302(0x8e,0x80);_nop_();
_nop_();break;
case2:table1[4]++;
if(table1[4]==13)table1[4]=1;
write1302(0x8e,0x00);
write1302(0x88,table1[4]);
write1302(0x8e,0x80);
_nop_();
_nop_();
break;
case3:table1[3]++;
if(table1[3]==31)table1[3]=1;
write1302(0x8e,0x00);
write1302(0x86,table1[3]);
write1302(0x8e,0x80);
_nop_();
_nop_();
break;
case4:table1[5]++;
if(table1[5]==8)table1[5]=1;
write1302(0x8e,0x00);
write1302(0x8a,table1[5]);
write1302(0x8e,0x80);
_nop_();
_nop_();
break;
case5:table1[2]++;
if(table1[2]==24)table1[2]=0;
write1302(0x8e,0x00);
write1302(0x84,table1[2]);
write1302(0x8e,0x80);
_nop_();
_nop_();
break;case6:
table1[1]++;
if(table1[1]==61)table1[1]=0;
write1302(0x8e,0x00);
write1302(0x82,table1[1]);
table1[0]=0;
write1302(0x80,0);
write1302(0x8e,0x80);
_nop_();
_nop_();
break;
}
}
voidjianshijian(){
switch(key_number)
{
case0:break;case1:table1[6]--;
if(table1[6]》99)table1[6]=99;
write1302(0x8e,0x00);
write1302(0x8c,table1[6]);
write1302(0x8e,0x80);
_nop_();
_nop_();
break;
case2:table1[4]--;
if(table1[4]==0)table1[4]=12;
write1302(0x8e,0x00);
write1302(0x88,table1[4]);
write1302(0x8e,0x80);_nop_();
_nop_();
break;
case3:table1[3]--;
if(table1[3]==0)table1[3]=31;
write1302(0x8e,0x00);
write1302(0x86,table1[3]);
write1302(0x8e,0x80);
_nop_();
_nop_();
break;
case4:table1[5]--;
if(table1[5]==0)table1[5]=7;
write1302(0x8a,table1[5]);write1302(0x8e,0x80);_nop_();_nop_();break;case5:
table1[2]--;
if(table1[2]==-1)table1[2]=0;write1302(0x8e,0x00);write1302(0x84,table1[2]);write1302(0x8e,0x80);_nop_();
_nop_();break;case6:
table1[1]--;
if(table1[1]》60)table1[1]=60;write1302(0x8e,0x00);write1302(0x82,table1[1]);table1[0]=0;
write1302(0x80,0);write1302(0x8e,0x80);_nop_();
_nop_();break;
}
}keyscan(){
if(key_mnue==0){
delay(10);
if(key_mnue==0){fm();
key_number++;}
if(key_number==7)
{fm();
key_number=1;}}
while(!key_mnue);if(key_jia==0){
delay(10);if(key_jia==0){
fm();
jiashijian();}}
while(!key_jia);if(key_jian==0){
delay(10);
if(key_jian==0){
fm();
jianshijian();}
}
while(!key_jian);if(key_enter==0){
delay(10);
if(key_enter==0){fm();
key_number=0;}}
while(!key_enter);
jiemian++;
if(jiemian==15){
readbusy();jiemian=0;
switch(key_number)//调时间时界面显示{
//case0:writecmd12864(0x08);
break;case1:writecmd12864(0x83);
readbusy();
writedata12864(0x5f);readbusy();
writedata12864(0x5f);break;
case2:writecmd12864(0x84);
readbusy();
writedata12864(0x5f);readbusy();
writedata12864(0x5f);break;
case3:writecmd12864(0x85);
readbusy();
writedata12864(0x5f);readbusy();
writedata12864(0x5f);break;
case4:writecmd12864(0x95);
readbusy();
writedata12864(0x5f);readbusy();
writedata12864(0x5f);break;
case5:writecmd12864(0x8a);
readbusy();
writedata12864(0x5f);readbusy();
writedata12864(0x5f);break;
case6:writecmd12864(0x8b);
readbusy();
writedata12864(0x3a);readbusy();
writedata12864(0x5f);readbusy();
writedata12864(0x5f);break;}}}
voidmain(void){
uinta=0,b=0,c=0,t=0,tt;ucharerhang=0;
tmod=0x01;
//定时器0方式1
ea=1;//允许cpu中断it0=1;
//int0下降沿有效ex0=1;
//开int0中断
init1302();//chuli();
//set1302(0x80,table,7);
lcdclear();
while(1){
lcdinit();
//液晶初始化
lcdclear();
delay(100);
writecmd12864(fun_mode);
lcdclear();
readbusy();
while(1){
tt=read_disp_temperature();
ds18b20data=tt*0.0625;
t=ds18b20data*10+0.5;
//放大10倍
输出并四舍五入
a=t/100;
//十位b=t/10-a*10;//个位//ds_20[1]=0x24;c=t-a*100-b*10;//小数位
read1302xulie(0x81,7);
chuli2(0);
//miaomiaoshi=table1[0]/10;
miaoge=table1[0]%10;
chuli2(1);
//minfenshi=table1[1]/10;
fenge=table1[1]%10;
chuli2(2);
//hourshishi=table1[2]/10;
shige=table1[2]%10;
chuli2(3);
//ririshi=table1[3]/10;
rige=table1[3]%10;
chuli2(4);
//yueyueshi=table1[4]/10;
yuege=table1[4]%10;
chuli2(5);
//xingqi
zhou=table1[5];
chuli2(6);
//年nianshi=table1[6]/10;
niange=table1[6]%10;
readbusy();
writecmd12864(0x9b);
//第四行显示readbusy();
writedata12864(shu[a]);
readbusy();
writedata12864(shu[b]);
//writecmd12864(0x9d);
readbusy();
writedata12864(0x2e);
readbusy();
writedata12864(shu[c]);
readbusy();
//writecmd12864(0x9e);
readbusy();
writedata12864(0x60);
readbusy();
writedata12864(0x43);
readbusy();
keyscan();
readbusy();
writecmd12864(0x92);
//第二行显示
readbusy();
for(erhang=0;
erhang《4;erhang++)
{
write_date(xingqi[erhang]);
readbusy();
}
writecmd12864(0x95);
readbusy();
for(erhang=0;erhang《2;
erhang++)
{
write_date(hanzishu[erhang+zhou*2-2]);
readbusy();}
readbusy();
keyscan();
readbusy();
writecmd12864(0x82);
//第一行显示readbusy();
writedata12864(shu[2]);
readbusy();
writedata12864(shu[0]);
readbusy();
writedata12864(shu[nianshi]);
readbusy();
writedata12864(shu[niange]);
//writecmd12864(0x9d);
readbusy();
writedata12864(shu[yueshi]);
readbusy();
writedata12864(shu[yuege]);
readbusy();
//writecmd12864(0x9e);
readbusy();
writedata12864(shu[rishi]);
readbusy();
writedata12864(shu[rige]);
readbusy();
keyscan();
readbusy();
第19页共19页
writecmd12864(0x8a);
//第三行显示readbusy();
writedata12864(shu[shishi]);
readbusy();
writedata12864(shu[shige]);
//writecmd12864(0x9d);
readbusy();
writedata12864(0x3a);
readbusy();
writedata12864(shu[fenshi]);
readbusy();
//writecmd12864(0x9e);
readbusy();
writedata12864(shu[fenge]);
readbusy();
writedata12864(0x3a);
readbusy();
writedata12864(shu[miaoshi]);
readbusy();
//writecmd12864(0x9e);
readbusy();
writedata12864(shu[miaoge]);
readbusy();
readbusy();
keyscan();
readbusy();
readbusy();

工业以太网技术有哪些技术?
CIO发展前景尚不明朗 如何才能稳步发展?
何谓EMC?EMC的设计理念是什么?
智能网联汽车:进BYD还是继续干待遇好点的外包
消息称Marvell将裁撤大部分中国研发团队
lcd12864万年历程序
HTTP协议培训教程资料
H3CX3至尊版无线路由器评测 在游戏加速方面的表现是传统无线路由器所不能比拟的
SMT贴片加工必备:全面解析锡膏种类与特性
明纬电源60W单组输出导轨电源DRA-60系列介绍
荣耀V30系列配置细节曝光 搭载麒麟990以及盲孔设计
训练深度神经网络的感觉就像买彩票,“打了折”的深度学习
魅族zero真无孔手机2019年魅族首款手机,获iF设计金奖
ADUM5402CRWZ集成DC/DC转换器的四通道2.5 kV隔离器介绍
工业4glte路由器的功能是怎样的
中国移动把陆良南境颐养小镇打造成5G特色智慧化小镇
2030年全球电动汽车将有1.25亿辆,对电网有何影响?电网又该如何应对?
发挥FPGA优势,培养创新型嵌入式计算人才
如何自制一个带音箱功能的蓝牙鼠标
金士顿A1000固态硬盘评测 好不好用