单片机源程序如下:
//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,
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』