前言
c51单片机万年历模拟期末作品,用到了温度传感模块及12864液晶显示模块及矩阵键盘模块及复位电路,电源模块,晶振模块,可在12864屏上显示实时温度与时间,本人自己做的期末作品,仅供同学们研究学习。
一、效果展示
二、连线
二、部分代码示例
1.端口定义
代码如下(示例):
#include<reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
// 矩阵键盘
unsigned char j,k,jp,key;
bit flag = 0;
sbit row1=P2^5; //行端口定义
sbit row2=P2^4;
sbit row3=P2^3;
sbit row4=P2^2;
sbit col1=P1^7; //列端口定义
sbit col2=P1^6;
sbit col3=P2^0;
sbit col4=P2^1;
/*TS12864A-3 端口定义*/
#define LCD_data P0 //数据口
sbit LCD_RS = P3^5; //寄存器选择输入
sbit LCD_RW = P3^6; //液晶读/写控制
sbit LCD_EN = P3^4; //液晶使能控制
sbit LCD_PSB = P3^7; //串/并方式控制
uint temp;
float f_temp;
sbit s1=P2^2;
sbit s2=P2^3;
sbit s3=P2^4;
sbit ds=P3^3; //温度传感器信号线
2.温度显示函数
代码如下(示例):
void tempdisplay() //温度显示函数
{
uint mm;
tempchange();
mm=get_temp();
tab2[10]=mm%1000/100+'0';
tab2[11]=mm%100/10+'0';
tab2[12]='.';
tab2[13]=mm%10+'0';
wr_com(0x80);
for(i=0;i<14;i++)
{
wr_date(tab2[i]);
delay(10);
}
wr_com(0x88); //显示作者1
for(i=0;i<9;i++)
{
wr_date(tab4[i]);
delay(10);
}
wr_com(0x98); //显示作者2
for(i=0;i<9;i++)
{
wr_date(tab5[i]);
delay(10);
}
}
3.时间显示函数
代码如下(示例):
void display() //时间显示函数
{
change();
wr_com(0x90); //数字显示位置
wr_date(y1+48);
delay(10);
wr_date(y2+48);
delay(10);
wr_date(y3+48);
delay(10);
wr_date(y4+48);
delay(10);
wr_com(0x93);
wr_date(mol+48);
delay(10);
wr_date(mor+48);
delay(10);
wr_com(0x95);
wr_date(dl+48);
delay(10);
wr_date(dr+48);
delay(10);
wr_com(0x89);
wr_date(hl+48);
delay(10);
wr_date(hr+48);
delay(10);
wr_com(0x8b);
wr_date(ml+48);
delay(10);
wr_date(mr+48);
delay(10);
wr_com(0x8d);
wr_date(sl+48);
delay(10);
wr_date(sr+48);
delay(10);
}
4.主函数
代码如下(示例):
void main()
{
lcd_init(); //lcd初始化
init(); //定时器初始化
fistdispay(); //汉字显示
while(1)
{
keyScan();
if(flag)
{
lcd_init(); //lcd初始化
while(1)
{
tempdisplay(); //温度显示
}
}
else
{
display(); //时间显示
calendar_change(); //判断闰年非闰年
}
}
}
总结
提示:
上述为部分代码,
想学习参考的同学可以关注公众号:老王搞电脑
后台回复:单片机
即可获得源程序及pcb制版图