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

2019-11-09来源: 51hei关键字:单片机  点阵时钟  LED

单片机源程序如下:

//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,

[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] ..[12]
关键字:单片机  点阵时钟  LED 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic479498.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:51单片机+编码器+42步进电机的源程序
下一篇:STC15F2K60S2单片机调试超声波HC-SR04测距经验

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

avr单片机汇编参考程序
该AVR的汇编程序选自《M128》,程序中体现了AVR汇编的基本特点,仅供大家参考。该应用系统为一个带1/100秒的简易24小时制时钟,它在上电后能够自动从11时59分55秒00开始计时和显示时间。下图为简易时钟系统硬件电路图。                           图  简易24小时时钟硬件原理图系统使用8个LED数码管显示时、分、秒、1/100秒4个时段的数字,每个时段占用2个LED。显示方式采用动态扫描方式,ATme
发表于 2019-11-14
avr单片机汇编参考程序
AVR单片机一些学习笔记
下面是自己在学习AVR单片机时的学习经验,分享出来给大家,一起学习。1、AVR单片机采用RISC架构,8051单片机采用CISC架构。 前者速度为后者的2~4倍,为流水线操作指令。2、 AVR单片机有32个通用寄存器(地址在RAM区从$0000开始到$001F),其中有6个(最后6个)合并为3个16位的X,Y,Z寄存器,用来存放地址指针,Z寄存器还可以寻址程序存储器。3、 哈佛结构,131条机器指令。4、 延迟开机功能。5、 内部自带RC振荡器,可提供1/2/4/8MHZ的工作时钟。6、 FLASH+EEPROM+SRAM+SPI+USART+TWI+PWM+RTC+10位ADC+模拟比较器+JTAG。7、 堆栈指针向下增长,51
发表于 2019-11-14
avr单片机mega32之ADC程序
查手册,写程序,有问题再讨论*****************************************************************//CPU:mega32//编译器:iar#include <ioavr.h>#include "adc.h"int main(void){        int m;adc_init();             m = adc_get(0);     &n
发表于 2019-11-14
mega32单片机最简单的中断程序——外部中断
学单片机的第二条槛:中断,每次我都选最简单的中断——外部中断。*****************************************************************//CPU:mega32//编译器:iar#include <ioavr.h>void eint0_init(void);int main(void){    DDRD |= (1 << 7);     //PD7置为输出    eint0_init();    
发表于 2019-11-14
mega32单片机最简单的中断程序——外部中断
PIC单片机入门指南
;    把最下面的框钩上后点保存这时看到文本框内的字变成了蓝色了。开始编写程序最后点上面中间的那个红色的图标编译,在项目目录里面就会有个hex的文件,最后下载到单片机PIC10F200里面就可以用了!
发表于 2019-11-14
PIC单片机入门指南
单片机之间通信(类红外发送与接收)
void call_user_sent()   {       static bit data_flag=0;      static unsigned char a=0,b=0,c=0;      TRISB5=1;      TRISB2=0;      if(!data_flag)        //起始头    
发表于 2019-11-14
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved