⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 64*16的点阵显示
💻 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 + -