基于PIC单片机电子时钟-液晶1602显示

基于PIC单片机电子时钟-液晶1602显示_第1张图片
#define _XTAL_FREQ 4000000 //晶振定义
#include //头文件包含
//__CONFIG(0x3b31);//芯片配置字定义
// CONFIG1
#pragma config FOSC = XT // Oscillator Selection bits (XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled and can be enabled by SWDTEN bit of the WDTCON register)
#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)
#pragma config MCLRE = ON // RE3/MCLR pin function select bit (RE3/MCLR pin function is MCLR)
#pragma config CP = OFF // Code Protection bit (Program memory code protection is disabled)
#pragma config CPD = OFF // Data Code Protection bit (Data memory code protection is disabled)
#pragma config BOREN = ON // Brown Out Reset Selection bits (BOR enabled)
#pragma config IESO = ON // Internal External Switchover bit (Internal/External Switchover mode is enabled)
#pragma config FCMEN = ON // Fail-Safe Clock Monitor Enabled bit (Fail-Safe Clock Monitor is enabled)
#pragma config LVP = ON // Low Voltage Programming Enable bit (RB3/PGM pin has PGM function, low voltage programming enabled)
// CONFIG2
#pragma config BOR4V = BOR40V // Brown-out Reset Selection bit (Brown-out Reset set to 4.0V)
#pragma config WRT = OFF // Flash Program Memory Self Write Enable bits (Write protection off)
//宏定义
#define uchar unsigned char
#define uint unsigned int
#define RS RC0 //命令数据选择
#define RW RC1 //读写选择
#define EN RC2 //使能
uint count=0;
uchar miao,fen,shi;
/*延时函数部分
大约延时1ms
************************************************/
void delayms(uint ms)
{
uchar i,j;
for(j=ms;j>0;j–)
for(i=110;i>0;i–);
}

/*******************1602发送主函数******************
************************************************/
void LCD_WRITE(uchar data,uchar com)
{
    RS=com;//1表示数据;0表示命令
    PORTD=data;//将数据写入
    delayms(5);//延时
    EN=1;//使能
    delayms(5);//延时
    EN=0;//关闭
}
/*******************1602显示主函数******************
//指定位置显示字符
//输入:列地址X(0~15),行地址y(0~1)
// 字符串指针*p,要显示的字符个数num
************************************************/
void disp_1602(uchar x,uchar y,uchar *p,uchar num)
{
    uchar i;
    for(i=0;i

************************************************/
void main(void)
{
LCD_init();//端口初始化
T1CKPS0=1;
T1CKPS1=1; //前置分频器8分频
TMR1CS=0; //TMR1工作于定时器方式
TMR1L=(65536-12500)%256; //定时12500个时钟
TMR1H=(65536-12500)/256;
GIE=1; //总中断允许
PEIE=1; //外围功能模块中断允许
TMR1IE=1; //TMR1中断允许
TMR1ON=1; //启动TMR1
while(1)
{
disp_1602(0,0,“Time:”,5);//第一行显示temp:
delayms(20);
LCD_WRITE(0x80+5,0); //写地址命令
LCD_WRITE(shi/10+0x30,1);//写数据
LCD_WRITE(shi%10+0x30,1);//写数据
LCD_WRITE(‘:’,1);//写数据
LCD_WRITE(fen/10+0x30,1);//写数据
LCD_WRITE(fen%10+0x30,1);//写数据
LCD_WRITE(‘:’,1);//写数据
LCD_WRITE(miao/10+0x30,1);//写数据
LCD_WRITE(miao%10+0x30,1);//写数据
}
}
//***中断服务程序
void interrupt isr(void)
{
if(TMR1IE&&TMR1IF) //判断是否为TMR1中断
{
TMR1L=(65536-12500)%256;
TMR1H=(65536-12500)/256;

TMR1IF=0;             //清TMR1中断标志位(必须用软件清零)  
count++;
if(count==10)
{
    count=0;
    miao++;
    if(miao==60)
    {
        miao=0;
        fen++;
        if(fen==60)
        {
            fen=0;
            shi++;
            if(shi==24)
                shi=0;
        }
    }
}

}
}

你可能感兴趣的:(单片机,单片机,stm32,嵌入式硬件)