标题:
单片机带时钟1602计算器终极程序 PCF8574T和PCF8563的通信协议 带详细注释
[打印本页]
作者:
想进步要学习
时间:
2020-1-29 13:45
标题:
单片机带时钟1602计算器终极程序 PCF8574T和PCF8563的通信协议 带详细注释
一年前弄的小玩意了,硬件丢失了,翻出来,重新分割了下,加了详细注释,注释很重要啊,以前没加详细,我自己理解起来也要半天,分享下,希望对他人有所帮助吧。其实我目前发的三个东西,现在想来,对单片机资源方面的知识涉及的不多,主要还是单片机C语言方面。在没硬件的情况下,我想分享的是我的思维,我是如何构思的,是如何运用运算符变量语句的。
带时钟计算器2.png
(290.89 KB, 下载次数: 37)
下载附件
2020-1-29 13:43 上传
带时钟计算器.png
(147.61 KB, 下载次数: 38)
下载附件
2020-1-29 13:43 上传
单片机源程序如下:
//=================================================================================================================================================================================================================
//软件功能:带时钟计算器
//硬件描述:最小系统(stc15)+ 1x(LCD1602 + PCF8574T) + 1x(5x4矩阵按键 + 74ls08)+ 1x(PCF8563)
//程序描述:IIC.c中有PCF8574T和PCF8563的通信协议
// anjian.c中有按键函数
// shizhong.c中有时钟相关函数
// jisuan.c中有计算器相关函数
//功能概括描述:LCD1602用于显示、可以切换计算器模式和时钟模式(时间模式和闹钟模式)
// (用x和y表示两个数的长度(小数点不算长度),则,x+y<16的条件下)可以进行四则运算
// 时间和闹钟可以设置
//=================================================================================================================================================================================================================
#include "reg15.h" //STC15Wxx/STC15Fxx系列头文件
#include "IIC.h" //I2C通信协议
#include "anjian.h"
#include "shizhong.h"
#include "jisuan.h"
#define FOSC 11059200L
#define T50MS (65536-FOSC/12/20) //12T,11.0592MHz(50ms=20MHz)
#define ANJ P1
sbit INT0=P3^2;
//=================================================================================================================================================================================================================
uchar b=0,ajbh=21,hang,tsgn=0; //LCD列变量,按键编号变量,LCD行变量,特殊模式切换变量
uchar HUANCUN[16],SUM[17],a=0,j=0,K=0,L=0,q=1,p=0; //算式缓存数组,计算结果缓存数组,算式缓存数组对应位变量,运算符标识变量,第一位数小数点变量,第二位数小数点变量,运算符限制变量,小数点限制变量
uchar SZXSHC[8],sjsz=0,naoz=0,shuzi=10; //时间缓存变量,时钟模式切换变量,闹钟模式切换变量,特殊模式下的数字键变量
//=================================================================================================================================================================================================================
//中断和P口初始化程序
//=========================================================================================
void Init()
{
AUXR&=0x7f; //定时器0为12T模式
INT0=1; //外部中断P口置高电平
ANJ=0xf0; //矩阵输入输出对应P口初始化
a4=0;
TMOD=0x00; //定时器为方式0(STC15F2K60S2方式0是16位自动重装模式)
TL0=T50MS; //初始化定时值
TH0=T50MS>>8;
ET0=1; //定时器T0中断开启
IT0=1; //设置INT0的中断类型为下降沿触发
EX0=1; //INT0中断开启
PT0=1; //优先级T0优先
PX0=0; //外部中断优先级低
EA=1; //总中断开启
TR0=0; //定时器0
}
//=========================================================================================
void main() //主函数
{
Init();
LCDInit(); //1602初始化
CleanAlarm(); //闹钟初始化
TR0=1;
while(1);
}
//=========================================================================================
//功能说明:按键所用中断
// 矩阵按键的四个置位口连接74LS08的输入端,用了3个与门,2个与门的输出端接1个与门的输入端,
// 最后引出来接INT0口,采用外部中断方式
//=========================================================================================
void EX_T() interrupt 0
{
EX0=0; //INT0中断关闭
IICdelay1(20); //去抖动
if(INT0==0) //如果仍有键按下
{
An_j();
Cu_l();
SZ_bd();
}
while(!INT0); //判断按键是否松开
IICdelay1(20); //去抖动
EX0=1; //INT0中断开启
}
//==================================================================================
//功能说明:时钟所用中断
// 给定变量tu用于计时,200ms读取一次闹钟响铃位GetPCF8563(0x01,SZXSHC+7)
// 判断该位,如果告警了,LCD右下角显示字符'n'
// 持续12.5s后字符'n'消失
// 按任意键关闭闹钟在按键部分程序
//==================================================================================
void timer0() interrupt 1 //定时器中断
{
static uchar cb=0,tu=0;
tu++;
if(tu==4){ //加计数变量tu,不然读取速度过于频繁
GetPCF8563(0x01,SZXSHC+7); //读取溢出标志位到SZXSHC[7]
tu=0;
}
if(SZXSHC[7]&0x08){ //判断闹钟溢出标志位是否为1(第4位)
if(cb==0){
tu=4;
cb=1;
LCD_writezl(0x01); //LCD清除显示
GotoXY(15,1); //右下角显示字符n
yige('n');
}else{
if(tu==254){ //显示10多秒n后,闹钟自动关闭
SetPCF8563(0x01,0x02); //清除告警中断位
LCD_writezl(0x01); //LCD清除显示
tu=3;
cb=0;
}
}
}else{
Sh_z(sjsz);
Sh_z(naoz);
if(tu>4){ //如果是按任意键后关闭闹钟
tu=3;
cb=0;
}
}
}
//==================================================================================
复制代码
原理图: 无
仿真: 无
代码:
带时钟1602计算器终极程序.rar
(540.32 KB, 下载次数: 68)
2020-1-29 13:43 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
XXT009435
时间:
2020-6-10 20:25
谢谢楼主非常好
作者:
123学习者
时间:
2020-6-11 12:33
感谢楼主
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1