单片机制作的12864液晶万年历C语言程序.docx

上传人:b****5 文档编号:7013413 上传时间:2023-01-16 格式:DOCX 页数:25 大小:19.43KB
下载 相关 举报
单片机制作的12864液晶万年历C语言程序.docx_第1页
第1页 / 共25页
单片机制作的12864液晶万年历C语言程序.docx_第2页
第2页 / 共25页
单片机制作的12864液晶万年历C语言程序.docx_第3页
第3页 / 共25页
单片机制作的12864液晶万年历C语言程序.docx_第4页
第4页 / 共25页
单片机制作的12864液晶万年历C语言程序.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

单片机制作的12864液晶万年历C语言程序.docx

《单片机制作的12864液晶万年历C语言程序.docx》由会员分享,可在线阅读,更多相关《单片机制作的12864液晶万年历C语言程序.docx(25页珍藏版)》请在冰豆网上搜索。

单片机制作的12864液晶万年历C语言程序.docx

单片机制作的12864液晶万年历C语言程序

#include

#include

#include

////////////////////////////////////////DS18B20

#defineucharunsignedchar

#defineuintunsignedint

sbitDQ=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;

//////////////////////////////////////////DS1302

sbitDS1302_RST=P1^4;

sbitDS1302_IO=P1^3;

sbitDS1302_SCK=P1^2;

unsignedchartable[]={0X00,0X18,0X0c,0X15,0X06,0X01,0X0a};//0s24min12hour14ri5yue5zhou2010nian

unsignedchardatatable1[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的连接

unsignedcharDT;

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);//精确延时,大于480us

DQ=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

{

write1302(address,table[i]);

address+=2;

}

write1302(0x8e,0x80);

}

voidread1302xulie(unsignedcharaddress,unsignedcharn)

{

unsignedchari;

for(i=0;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:

b

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1