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

📄 main.c

📁 单片机c语言程序设计100例--基于PIC+PROTEUS
💻 C
字号:
//-----------------------------------------------------------------
//  名称: 用DS1302及DS18B20+MAX6951设计的多功能电子日历牌
//-----------------------------------------------------------------
//  说明: 本例所有分立式数码管全部用MAX6951驱动,电路中使用了时钟芯片
//        DS1302与温度传感器DS18B20,实现了含温度显示的多功能电子日历
//        牌设计.日历与时钟的调节功能由读者自行完成.
//
//-----------------------------------------------------------------
#include <pic.h>
#include <stdio.h>
#include "DS1302.h"
#include "DS18B20.h"
#define INT8    signed char
#define INT8U   unsigned char
#define INT16U  unsigned int
//MAX695X引脚定义
#define DIN  RC0  //数据线
#define CLK  RC1  //时钟线
#define CS0  2    //YYYY-MM-DD驱动器片选线
#define CS1  3    //HH-MM-SS W驱动器片选线
#define CS2  4    //温度数码管驱动器片选线
//秒闪烁LED控制
#define LED_BLINK   RC7
//MAX6951片选控制端口
#define CS_PORT PORTC
//日期显示缓冲,格式:YYYY-MM-DD(全解码,直接发送)
INT8U Date_Buff[] = {2,0,0,0,0,0,0,0};
//时间及星期显示缓冲,格式:HH-MM-SS W(全解码,直接发送)
INT8U Time_w_Buff[] = {0,0,0,0,0,0,0};
//温度显示缓冲:XXX.X℃ ~ -XX.X℃,(范围:125℃~-55℃),(全部不解码,发送段码)
//缓冲最后两位固定为"℃"中的度及C的段码
INT8U Temp_Buff[] = {0x00,0x00,0x00,0x00,0x63,0x4E};
//在非解码模式下MAX6950/1对应的段码表,此表不同于直接驱动时所使用的段码表
//原来的各段顺序是:     DP,G,F,E,D,C,B,A
//MAX6950/1的驱动顺序是:DP,A,B,C,D,E,F,G
//除小数点位未改变外,其他位是逆向排列的.
const INT8U SEGCODE_695X[] = 
{ 0x7E,0x30,0x6D,0x79,0x33,0x5B,0x5F,0x70, //0~7
  0x7F,0x7B,0x77,0x1F,0x4E,0x3D,0x4F,0x47, //8~F
};
#define NEG_SEGCODE 0x01    //负数符号段码"-"
#define BLK_SEGCODE 0x00    //黑屏段码
extern volatile INT8U DateTime[];
//-----------------------------------------------------------------
// 延时函数
//-----------------------------------------------------------------
void delay(INT8U n)
{
    for (INT8U i = 0 ; i < n; i++) __delay_ms(100);
}

//-----------------------------------------------------------------
// 向MAX695X写数据
//-----------------------------------------------------------------
void Write(INT8U Addr,INT8U Dat,INT8U CS_NO)
{
    INT8U i;
    CS_PORT &= ~(1<<CS_NO);
    for(i = 0; i < 8; i++)    //串行写入8位地址Addr
    {


    }
    for(i = 0; i < 8; i++)    //串行写入8位数据Dat
    {


    }
    CS_PORT |= (1<<CS_NO);
}

//-----------------------------------------------------------------
// MAX695X初始化
//-----------------------------------------------------------------
void Init_MAX695X()
{
    //设置亮度:中等亮度/扫描所有的0~7只数码管/非关断0x01;关断:0x00


}

//-----------------------------------------------------------------
// 将两位整数分解为两个数位
//-----------------------------------------------------------------
void DEC_TO_2DIGIT(INT8U d, INT8U *a1, INT8U *b1)
{


}
   
//-----------------------------------------------------------------
// 读取并显示温度
//-----------------------------------------------------------------
void Read_and_Show_Temperature()
{


}

//-----------------------------------------------------------------
// 读取并显示当前日期时间
//-----------------------------------------------------------------
void Read_and_Show_DateTime()
{    


}

//-----------------------------------------------------------------
// 主程序
//-----------------------------------------------------------------
void main()
{
    T0CS = 0;                               //TMR0时钟选择:内部时钟
    PSA = 0;                                //前分频器分配给TMR0
    PS2 = 1; PS1 = 0; PS0 = 0;              //32分频(OPTION低3位为100)
    TMR0 = (INT8U)(256 - _XTAL_FREQ/4/32*0.005);  //5ms定时初值
    T0IF = 0;                               //清TMR0中断标志
    GIE = 1;                                //开全局中断
    T0IE = 1;                               //使能TMR0溢出中断
    TRISC = 0x00; PORTC = 0xFF;             //MAX6951控制端口
    TRISD2 = TRISD3 = 0;                    //DS1302 SCLK,RST输出
    Init_MAX695X();                         //初始化三片695X 
    Read_Temperature();                     //预读温度
    //初始化DS1302,并配置使能DS1302的点滴式充电器
    init_DS1302(); delay(10);               //等待1秒(10*100ms) 
    while (1)
    {


    }
}

//-----------------------------------------------------------------
// TMR0溢出中断控制秒闪烁功能
//-----------------------------------------------------------------
void interrupt TMR0_OVR_Interrupt()
{
   static INT8U pre_second = 0;
   static INT8U T_Count = 0;               //用于延时累加的变量
   if (T0IF)
   {
      

   } 
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -