历史上的今天
返回首页

历史上的今天

今天是: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个与门的输入端,

推荐阅读

史海拾趣

Axiohm公司的发展小趣事

随着环保意识的日益增强,Axiohm公司积极响应国家绿色发展的号召,将环保理念融入产品设计和生产过程中。公司投入大量资金研发环保材料和生产工艺,成功推出了一系列绿色电子产品。这些产品不仅符合环保标准,还具有良好的性能价格比,受到了消费者的广泛好评。Axiohm因此赢得了业界的赞誉和政府的支持。

Bombardier Inc公司的发展小趣事

进入20世纪中叶,庞巴迪公司在航空领域的业务持续扩大。其生产的PBV-1A水上巡逻机,不仅装备了加拿大空军,还出口到美国海军。这一时期,庞巴迪在航空电子系统的集成和创新上取得了重要突破,提高了飞机的性能和安全性。这些技术进步使得庞巴迪在全球航空领域树立了良好的声誉。

BENCENT公司的发展小趣事

在取得一系列成绩的同时,BENCENT公司也始终关注可持续发展。公司注重环保和节能技术的研发和应用,致力于为客户提供更加环保、高效的电子产品。同时,公司还积极参与社会公益事业,回馈社会。展望未来,BENCENT公司将继续坚持创新驱动、质量为本的发展理念,不断推动电子行业的进步和发展。


请注意,这些故事仅为框架性的描述,并未包含具体的细节和数据。您可以根据BENCENT公司的实际情况和发展历程,对这些故事进行进一步的丰富和完善。同时,确保在描述事实时保持客观公正的态度,避免加入主观评价。

AMERICASEMI [America Semiconductor, LLC]公司的发展小趣事

AMERICASEMI公司成立于XXXX年,起初是一家专注于半导体技术研发的小型创业公司。在创立初期,公司面临着资金短缺、市场竞争激烈等诸多挑战。然而,凭借创始团队对半导体技术的深刻理解和市场需求的敏锐洞察,AMERICASEMI成功开发出一系列具有竞争力的半导体产品,并逐渐在市场中占据了一席之地。

歌尔(Goertek)公司的发展小趣事

APC的产品和服务在全球范围内赢得了广泛认可。其InfraStruXure产品线因其集成式的电力、制冷、机架、管理和服务实现了一种开放、具有适应性且集成化的解决方案,赢得了近20个奖项。此外,APC还因其卓越的产品和业务表现,在多个年份赢得了全球100多个奖项。这些奖项不仅证明了APC在电子行业中的领先地位,也反映了其对于创新和质量的不懈追求。

铨力(ALLPOWER)公司的发展小趣事

随着新能源汽车市场的快速发展,铨力公司看到了新的发展机遇。于是,公司开始布局新能源汽车领域,研发和生产新能源汽车所需的电源和充电设备。通过不断创新和拓展市场,铨力在新能源汽车领域也取得了显著的成绩,为公司的发展注入了新的动力。

这五个故事展示了铨力(ALLPOWER)公司在电子行业中的发展历程和取得的成就。从创立初期的太阳能电源产品研发,到技术突破和产品升级,再到国际市场的拓展和产业链整合,以及新能源汽车领域的布局,铨力始终保持着创新的精神和进取的态度,不断推动着公司的发展。

问答坊 | AI 解惑

FPGA推荐的设计10大设计原则

FPGA推荐的设计10大设计原则…

查看全部问答>

请教怎么加载两个菜单。

如题, 在练习菜单的基本设计, 请问高手们怎么在一个窗口加载两个菜单, 就是说手机屏幕上左下角和右下角都是菜单。 多谢高手们指教。…

查看全部问答>

uC/OS中断函数使用信号量出问题

我在uC/OS的中断服务程序中只要不调用函数,中断服务程序是可以运行的,但是一旦中断服务函数中涉及信号量,则外部等待这个信号量的任务只会执行一次就死在那里了! 串口中断接收程序: interrupt 20 void iUART0_Receive(void){    OSIn ...…

查看全部问答>

请教 单片机上使用开关,有抖动的问题

我现在定义了,如果P2.4是低电平则执行一个操作,使一个变量的值+1,现在我在P2.4口上接了个开关,就是那种按下去接着弹起来的按钮开关,现在按下去则P2.4是低电平,但是我发现这样有一些问题,按一次变量的值乱蹦,因为执行了很多次吧。 于是我加 ...…

查看全部问答>

求 NT 文件系统内幕一书

求 NT 文件系统内幕一书  中文版 可以另外加分或者现金 电子版 印刷版均可 tao_ao@126.com…

查看全部问答>

s3c2440的串口问题

我有一块S3C2440的板子,装好后通电三组串口好像短路一样,相互之间的阻值只有几十欧,用串口0连PC开机就不断输出乱码或者00 00....,本来调试串口是UART1的,即使启动时的调试信息也是通过UART1输出的。很奇怪,不知道是什么原因。…

查看全部问答>

windows mobile5.0系统如何定制

.本人想做一个windows mobile 5.0的系统. 请问也是用PB吗?? 怎么我做了一个mobile handheld.. 界面跟WINCE的一样!丑死了喔!…

查看全部问答>

新手求助如何实现USB功能

  本人做的项目是车载导航多媒体系统,主板是Pxa270,现在要添加usbhost驱动, 不知道PB工程里怎么修改,驱动程序生成的是DLL吗?大家说详细点 谢谢!…

查看全部问答>

怎样在.net2005中使用serialport控件

我在port_DataReceived事件中对窗口控件操作时老是提示要与独立线程创建的控件交互, 比如,我中该事件中收到一段字符,判断后关闭当前窗口, 这个简单的应用都实现不了,我该怎么做呢?…

查看全部问答>