📄 main.c
字号:
//========================================================================================
// 程序功能: 读DS1302时间至点阵屏显示
// 硬件平台: 普罗太克UPS状态采集系统
// CPU为PIC16F877时, 可以用ICD2来调试, 也可以进行烧写, 但价格较PIC16F74贵
// CPU为PIC16F74时, 只能用ICD2来烧写, 但价格便宜
// 两者的资源差别不是很大, 主要在ROM容量以及AD位数, 详见<<PPIC6C74|16F74|16F877资
// 对照表.doc>>, 不同的地方用预编译处理
// 软件平台: C51
// 编写时间: 2009-03-02
// 修改时间: 2009-03-02 1、点阵屏上显示的字是反的,将字模选项中取模走向设为逆向
// 2、点阵是从右向左显示,就是第一次送的字会右移至最右端,之后就将最右端
// 的字先行送出.即将for(cCharIndex=0;cCharIndex<8;cCharIndex++)改为
// for(cCharIndex=7;cCharIndex>=0;cCharIndex--) 但cCharIndex应定义为char
// 2009-03-03 将点阵显示程序跟ds1302时间程序合并起来,并坐了相应的修改
// 修改时间显示 点阵屏出现乱码,没有将DS1302的时间存放到显存转为ASCII,
// 如:G_ucDiszone[0]=((ucCurtime[2]&0xf0) >> 4+'0') ;
// 2009-03-04 时间运行时.':'以0.5s闪烁时经过一段时间会出现偏离.由于单片机与ds1302的晶振
// 不同,一段时间后自然就会偏离,之后根据时钟各位秒,每加1秒单片机就开定时,
// 每定时到500Ms关定时并作出相应的处理.
// static uc ucPreSecond=10; 去当前秒的值
// if((G_ucTime[0]!=ucPreSecond)&&(TR0==0) ) //':’以500的时间闪烁
// {
// TR0=1;
// G_b500mS=0;
// }//if
// if( G_b500mS==0 )
// {
// G_ucDiszone[5]=':';
// }//if
// else
// {
// TR0=0;
// G_ucDiszone[5]=' ';
// ucPreSecond=G_ucTime[0];
// }//else
// 2009-03-08 为什么(<<4)!=(*16)? send(tab[(G_ucDiszone[a]-'0')<<4+ucRow])与send(tab[(G_ucDiszone[a]-'0')*16+ucRow])
// 现象不同,原因是C语言中运算指令有优先级别,上句中没有加括号,是先运行+再运行<<
// 因此就出现错误,将其改为send(tab[((G_ucDiszone[a]-'0')<<4)+ucRow]);
// 2009-03-09 时间运行且':'闪烁时,P0口所对应的其他点阵屏中的二极管会有微亮现象。将时间显示屏蔽后单独显示
// 微亮消失;同时运行时间但':'不闪烁,微亮也消失;假设微亮是由':'的闪烁而产生的,然后进入
// 控制':'闪烁函数中,关掉定时后,微亮也消失;进入定时后,程序运行G_ucDiszone[5]=':'
// 出现微亮,
// 1、考虑到字模的位置取错,之后就做了判断,
// if( G_ucDiszone[cCharIndex]==' ')
// Matrix_Send1Row(tab[16*16+ucRow]);
// else
// Matrix_Send1Row(tab[((G_ucDiszone[cCharIndex]-'0')<<4)+ucRow]);
// 这样微亮就消失了,但为什么P2口所对应的点阵屏却不会出现辞现象呢?
// 2、用Keil模仿wave6000设置断点调试,如打开P0=0xfe;在关掉P0=0xff;微亮依然出现
// 之后就在清屏后设置了一个断点,while(1); 微亮消失,但是不清楚走一遍跟多遍会出现此问题
//
#include<Module.h>
extern void T0_Init(void);
extern void DS1302_GetTime(void);
extern void Time_ValueToASCII(void); extern void Matrix_Dis(void);
//========================================================================================
// 函数功能: 主程序
//========================================================================================
void main()
{
T0_Init();
while(1)
{
DS1302_GetTime(); //读取时间
Time_ValueToASCII(); //将时间转化为ASCII码
Matrix_Dis(); //送显示
}//while
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -