历史上的今天
今天是:2025年01月29日(星期三)
2020年01月29日 | 单片机带时钟1602计算器终极程序
2020-01-29 来源:51hei
一年前弄的小玩意了,硬件丢失了,翻出来,重新分割了下,加了详细注释,注释很重要啊,以前没加详细,我自己理解起来也要半天,分享下,希望对他人有所帮助吧。其实我目前发的三个东西,现在想来,对单片机资源方面的知识涉及的不多,主要还是单片机C语言方面。在没硬件的情况下,我想分享的是我的思维,我是如何构思的,是如何运用运算符变量语句的。
单片机源程序如下:
//=================================================================================================================================================================================================================
//软件功能:带时钟计算器
//硬件描述:最小系统(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个与门的输入端,
史海拾趣
|
我在uC/OS的中断服务程序中只要不调用函数,中断服务程序是可以运行的,但是一旦中断服务函数中涉及信号量,则外部等待这个信号量的任务只会执行一次就死在那里了! 串口中断接收程序: interrupt 20 void iUART0_Receive(void){ OSIn ...… 查看全部问答> |
|
我现在定义了,如果P2.4是低电平则执行一个操作,使一个变量的值+1,现在我在P2.4口上接了个开关,就是那种按下去接着弹起来的按钮开关,现在按下去则P2.4是低电平,但是我发现这样有一些问题,按一次变量的值乱蹦,因为执行了很多次吧。 于是我加 ...… 查看全部问答> |
|
我有一块S3C2440的板子,装好后通电三组串口好像短路一样,相互之间的阻值只有几十欧,用串口0连PC开机就不断输出乱码或者00 00....,本来调试串口是UART1的,即使启动时的调试信息也是通过UART1输出的。很奇怪,不知道是什么原因。… 查看全部问答> |
|
.本人想做一个windows mobile 5.0的系统. 请问也是用PB吗?? 怎么我做了一个mobile handheld.. 界面跟WINCE的一样!丑死了喔!… 查看全部问答> |
|
本人做的项目是车载导航多媒体系统,主板是Pxa270,现在要添加usbhost驱动, 不知道PB工程里怎么修改,驱动程序生成的是DLL吗?大家说详细点 谢谢!… 查看全部问答> |
|
我在port_DataReceived事件中对窗口控件操作时老是提示要与独立线程创建的控件交互, 比如,我中该事件中收到一段字符,判断后关闭当前窗口, 这个简单的应用都实现不了,我该怎么做呢?… 查看全部问答> |




