×
单片机 > 单片机程序设计 > 详情

单片机点阵时钟原理图和源码

发布时间:2020-06-10 发布时间:
|

单片机源程序如下:

//LED点阵时钟程序

//作者:刘宁 

//--------------------------------

#include "reg52.h"


#define  uchar unsigned char

#define  uint  unsigned int

//========================

//****滚屏事件定义****

#define         MSG_MV_L         1         //左移

#define         MSG_MV_R         2        //右移

#define         MSG_MV_U    3        //上移

#define         MSG_MV_D    4        //下移

#define         MSG_NONE         0        //无

uchar MSG_MV = 0;

//========================

//****显示状态定义****

#define STA_gTIME        1        //滚动显示时间

#define        STA_gTEMP        2        //滚动显示温度

#define        STA_gWORD        3        //滚动显示文字

#define        STA_sTIME        4        //静态显示时间

#define        STA_sWEEK        5        //静态显示星期

#define        STA_sDATE        6        //静态显示日期

#define STA_sYEAR        7        //静态显示年份

#define        STA_sTEMP        8        //静态显示温度

#define        STA_sWORD        9        //静态显示文字

#define STA_CHG                10        //校时模式

#define STA_SONG        11        //滚动显示诗歌

#define STA_COPYRIGHT        12        //开机显示

uchar STATE = 1;

//=========================

//****校时状态定义****

#define CHG_HOUR        1        //调整小时

#define CHG_MIN                2        //调整分

#define CHG_SEC                3        //调整秒

#define CHG_MON                4        //调整月

#define CHG_DAY                5        //调整日

#define CHG_WEEK        6        //调整星期

#define CHG_YEAR        7        //调整年

uchar CHANGE = 1;

uchar hide_times = 0;        //校时闪烁时间变量

uchar HIDE = 0;                //隐藏显示标志位

uchar TMP_TIME = 0; 

//=========================

//****按键定义****

sbit  key0 = P1^0;

sbit  key1 = P1^1;

sbit  key2 = P1^2;

sbit  key3 = P1^3;


#define KEY0        0x0e

#define KEY1         0x0d

#define KEY2         0x0b

#define KEY3         0x07


#define KEY0_S        0x0e        //KEY0短按下

#define KEY1_S        0x0d        //KEY1短按下 

#define KEY2_S        0x0b        //KEY2短按下

#define KEY3_S        0x07        //KEY3短按下

#define KEY0_L        0x1e        //KEY0长按下

#define KEY1_L        0x1d        //KEY1长按下

#define KEY2_L        0x1b        //KEY2长按下

#define KEY3_L        0x17        //KEY3长按下

#define KEY_NONE        0        //无按键

uchar MSG_KEY = KEY_NONE;

uchar key_times = 0;        //持续时间

uchar key_keep_times = 0;

uchar cur_key_val = 0;

uchar key_done = 0;        //按键事件有无做好

uchar exit = 0;        //校时状态下长时间无按键退出

//=========================

//uchar time_read_times = 0;        //读时间

//uchar tem_read_times = 0;        //读温度

//=========================

//****引脚定义****

sbit  CLK =P2^5 ;                  //74HC595移时钟 

sbit  STB =P2^4        ;          // 74HC595锁存信号 

sbit  Red=P2^7        ;          //红色数据输出引脚低电平有效            

sbit  Greed=P2^6;         //全屏控制使能0,低电平有效

sbit  OE = P0^7;           //全屏使能

//======================== 

//****DS1302**** 

sbit SCLK=P0^4;   //位定义1302芯片的接口,时钟输出端口定义在P2.4引脚

sbit DATA=P0^5;   //位定义1302芯片的接口,数据输出端定义在P2.5引脚

sbit RST=P0^6;    //位定义1302芯片的接口,复位端口定义在P2.6引脚


typedef struct __SYSTEMTIME__

{

        uchar Second;

        uchar Minute;

        uchar Hour;

        uchar Day;

        uchar Month;

        uchar Week;

        uchar  Year;

}SYSTEMTIME;        //定义的时间类型

SYSTEMTIME Time;



//=========================================

//****18B20****

sbit DQ = P0^7

;  //定义DS18B20端口DQ  


unsigned char data  temp_data[2] = {0x00,0x00} ;

unsigned char data  temp_ram[5] =   {0x00,0x00,0x00,0x00,0x00} ;

unsigned char code  ditab[16] =    {0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,

                                    0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};

//==========================================

bit presence  ;

uchar SendData;                  //要发送的数据变量 

uchar hang;                        //行扫描变量  (半屏只有16行,所以hang=0到15)

uchar move_times = 0;        //左右移动位数

uchar start_word = 0;



uchar data h_dispram[10];         //显示缓存

uchar code *disword[26];        //显示文字指针



void  Keyscan (void); //修改参数按键扫描子程序 

void  Sendping(); //发送半屏子程序

void  Put_Wdispram(uchar first_word);//

void  Put_Hdispram(); //把显示文字放入显示缓存

void  Move_Left();        //左移

void  Move_Right();        //右移

void  RL_Move();

void  UD_Move();

void  Show_Line();

void  Show_Move_Word(uchar code *WORDS[][8]);

void  delay();

void  SendByte(void);

void  RowsCan(void);

void  Disp_Temperature();

void Put_gTEMP();

void Change_obj();


uchar ReadKey1();




uchar code MY_WORDS[][16]= 

                                        { 

{0x10,0x08,0x04,0x7F,0x01,0x21,0x12,0x0A,0x04,0x06,0x0A,0x11,0x21,0x41,0x80,0x00},

{0x04,0x04,0x04,0xA4,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x04,0x84,0x14,0x08,0x00},/*"刘",0*/

{0x02,0x01,0x3F,0x20,0x40,0x00,0x00,0x7F,0x01,0x01,0x01,0x01,0x01,0x01,0x05,0x02},

{0x00,0x04,0xFE,0x04,0x08,0x00,0x00,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"宁",1*/

{0x01,0x01,0x01,0x01,0x01,0x1F,0x10,0x10,0x10,0x1F,0x10,0x01,0x28,0x24,0x44,0x00},

{0x00,0x00,0xF8,0x00,0x10,0xF8,0x10,0x10,0x10,0xF0,0x10,0x10,0x88,0x44,0x44,0x00},/*"点",2*/

{0x00,0xF8,0x88,0x97,0xA1,0x91,0x8A,0x8F,0x88,0xA8,0x97,0x80,0x80,0x80,0x80,0x80},

{0x80,0x80,0x80,0xFC,0x00,0x40,0x40,0xFC,0x40,0x40,0xFE,0x40,0x40,0x40,0x40,0x40},/*"阵",3*/

{0x00,0x00,0x3F,0x00,0x00,0x00,0xFF,0x03,0x07,0x06,0x0C,0x18,0x31,0x7F,0x20,0x00},

{0x00,0x30,0xF8,0x00,0x00,0x0C,0xFE,0x00,0x00,0x40,0x20,0x10,0xF8,0x0C,0x08,0x00},/*"云",0*/

{0x01,0x01,0xFF,0x01,0x02,0x3F,0x24,0x22,0x2F,0x21,0x3F,0x21,0x21,0x21,0x21,0x00},

{0x00,0x04,0xFE,0x00,0x00,0xFC,0x24,0x44,0xF4,0x04,0xFC,0x04,0x04,0x14,0x08,0x00},/*"南",1*/

{0x02,0x02,0x04,0x3F,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x3F,0x20,0x00},

{0x00,0x00,0x00,0xF8,0x08,0x08,0x08,0x08,0xF8,0x08,0x08,0x08,0x08,0xF8,0x08,0x00},/*"白",2*/

{0x04,0x04,0x7F,0x04,0x14,0x10,0x24,0x7C,0x09,0x10,0x7E,0x20,0x06,0x78,0x20,0x00},

{0x40,0x40,0xFE,0x40,0x40,0x40,0x7C,0x84,0x04,0x44,0x24,0x24,0x04,0x04,0x28,0x10},/*"药",3*/

{0x08,0x08,0x1F,0x10,0x20,0x4F,0x00,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},




                                        };


uchar code NO_WORDS[][16]={


{0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x24,0x18,0x00,0x00},/*"0",0*/

{0x00,0x00,0x00,0x10,0x70,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x7C,0x00,0x00},/*"1",1*/

{0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x04,0x04,0x08,0x10,0x20,0x42,0x7E,0x00,0x00},/*"2",2*/

{0x00,0x00,0x00,0x3C,0x42,0x42,0x04,0x18,


关键字:单片机  点阵时钟  LED 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
可升级和可配置的PSoC62系列MCU平台架构