您的位置 首页 资料

PIC16F877单片机驱动1602液晶屏的数字时钟程序

4MHz时钟–PIC-KIT3。mainc:includeincludeincludeDisplayhincludemainh__CONFIG(WDTDISLVPDISHSPWRTDIS

4MHz时钟–PIC-KIT3。

main.c:
#include
#include
#include “Display.h”
#include “main.h”
__CONFIG(WDTDIS & LVPDIS & HS & PWRTDIS & BORDIS); //设置877装备位
/************************界说显现字符*****************************************/
uchar Welcome_1[] = {” Welcome To Use “};
//uchar Welcome_2[] = {” DSK-27 System !”};
//uchar Power_On1[] = {” Power On “};
//uchar Auto_Mode1[] = {” Automatic Mode “};
uchar Time_Now[] = {“Time Now”};
uchar Time_Now_buf[6] = {0x00,0x00,0x00,0x00,0x00,0x00}; //界说Time Now显现缓冲单元
uchar hour=8; //界说小时分钟和秒变量
uchar min=12;
uchar sec=0;
uchar count_10ms; //界说10ms计数器
/*******************************************************************************
* 函 数 名: Delay_US(uint8 delay)
* 函数功用: 微秒延时–12us
* 进口参数: delay
* 返 回: 无
*******************************************************************************/
void Delay_US(uint delay)
{
for(;delay;)
{
delay–;
}
}
/*******************************************************************************
* 函 数 名: Delay_MS(uint16 delay)
* 函数功用: 毫秒延时–1ms
* 进口参数: delay
* 返 回: 无
*******************************************************************************/
void Delay_Ms(uint delay)
{
uint i;
for(i=0;i
Delay_US(83);
}
/*******************************************************************************
* 函 数 名: Delay_Sec(uint16 delay)
* 函数功用: 毫秒延时–1ms
* 进口参数: delay
* 返 回: 无
*******************************************************************************/
void Delay_Sec(uint delay)
{
uint i,j;
for(i=0;i<20*delay;i++)
{
for(j=0;j<4536;j++);
}
}
/*********守时器1初始化**********/
void Timer1_Init(void)
{
GIE = 1; //开总中止
PEIE = 1; //开外围功用模块中止
T1CKPS0=1;T1CKPS1=1; //分频比为1:8
TMR1CS = 0; //设置为守时功用
TMR1IE = 1; //使能TMRI中止
TMR1ON = 1; //发动守时器TMR1
TMR1H = 0xfb; //设置计数值高位,守时时刻为10ms
TMR1L = 0x1e; //设置计数值高低位
}
/*******中止服务函数,用于发生秒、分钟和小时信号*******/
void interrupt ISR(void)
{
if(TMR1IF==1)
{
TMR1IF=0;
TMR1H = 0xfb;
TMR1L = 0x1e;
count_10ms++;
if(count_10ms>=100)
{
count_10ms=0;
sec++;
if(sec==60)
{
sec=0;
min++;
if(min==60)
{
min=0;
hour++;
if(hour==24)
{
hour=0;min=0;sec=0; //若到24h,小时、分钟和秒单元清零
}
}
}
}
}
Time_Now_buf[0] = hour/10; //小时十位数据–转化并存储时钟数据
Time_Now_buf[1] = hour%10; //小时个位数据
Time_Now_buf[2] = min/10; //分钟十位数据
Time_Now_buf[3] = min%10; //分钟个位数据
Time_Now_buf[4] = sec/10; //秒钟十位数据
Time_Now_buf[5] = sec%10; //秒钟个位数据
}
/******************************************************************************
* 函 数 名: main()
* 函数功用: LCD显现字符
* 进口参数: 无
* 返 回: 无
*******************************************************************************/
void main()
{
uchar j=0;
Port_1602_Init();
INIT_1602();
TRISA3=0; //RA3和RA5现已初始化为一般IO口,此处只需设定方向,能够作为后续输出口运用
TRISA5=0;
Delay_Ms(200);
Display_1602_string(0,0,16,Welcome_1);//显现欢迎词
//Display_1602_string(0,1,16,Welcome_2);//显现欢迎词
Delay_Ms(100);
Timer1_Init();
Clear_Display();
Display_1602_string(4,0,8,Time_Now); //显现当时时刻xx:xx:xx
while(1)
{
DispNum_XY_1602(4,1,Time_Now_buf[0]);
DispNum_XY_1602(5,1,Time_Now_buf[1]);
DispChar_XY_1602(6,1,:);
DispNum_XY_1602(7,1,Time_Now_buf[2]);
DispNum_XY_1602(8,1,Time_Now_buf[3]);
DispChar_XY_1602(9,1,:);
DispNum_XY_1602(10,1,Time_Now_buf[4]);
DispNum_XY_1602(11,1,Time_Now_buf[5]);
//Clear_Display();
//Display_1602_string(3,0,10,Power_On1); //显现Power On
//Delay_Ms(1000);
//Close_Disp();
//Display_1602_string(0,0,15,Auto_Mode1); //Automatic Mode
//Open_Disp();
//DispChar_XY_1602(15,1,L);
//Delay_Ms(1000);
}
}
main.h:
#ifndef __MAIN_H__
#define __MAIN_H__
#define uchar unsigned char
#define uint unsigned int
void Delay_US(uint delay); //12微秒延时
void Delay_Ms(uint delay); //1毫秒延时
void Delay_Sec(uint delay); //1秒延时
void Timer1_Init(void);
void interrupt ISR(void);
#endif
Display.c:
#include
#include “Display.h”
#include “main.h”

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/255587.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部