📄 6416+1302电子钟.c
字号:
#include <AT89x51.H>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define constdel 400
#define MOVESPEED 1
#define word 120
#define word_index 10
#define word_lenth (word+word_index)*32
#define SDI P3_0
#define CLK P3_1
#define LE P2_6
#define OE P2_7
#define A0 P1_4
#define A1 P1_5
#define A2 P1_6
#define A3 P1_7
#define PORT P1
//
uchar code hanzi[]; //汉字字模
uchar code timer[11][16]; //0~9数字 //138驱动数据
//
void Send_data(unsigned char *d); /*串口发送一行*/
/******************************************/
sbit resget=P2^0; //时钟复位
sbit key_moda=P2^1; //模式转换
sbit key_up=P2^2; //时钟加
sbit key_Down=P2^3; //时钟减
sbit T_CLK=P2^4; //DS1302引脚连接
sbit T_IO =P2^5;
sbit T_RST=P2^6;
sbit ACC0=ACC^0; //1bit数据存储位
sbit ACC7=ACC^7;
const char code sw[]={0x00,0x80,0x40,0xc0,0x20,0xa0,0x60,0xe0,
0x10,0x90,0x50,0xd0,0x30,0xb0,0x70,0xf0};
uchar starts_time[7]={0x00,0x10,0x22,0x11,0x06,0x07,0x06}; //初始化后设置
uchar Move,Speed,Flicker,line,Sec,Cent,Hour,Year,Month,Day,Week; //时间变量
uchar a,b,f,h,msec,id,x; //标志计数器 a为自动转换显示时间,b为手动与自动标志
uint zimuo; //字模计数器
uchar BUFF[10]; //缓存
void DelayMs(void); // 延时
void in_data(); // 调整移动数据
void rxd_data(); // 串口发送移动数据
void Send_data(unsigned char *d);
//
void DelayMs(void){
uint h;
for(h=constdel;h;h--){;}
}
/**********************************************************/
void in_data(void) //调整数据
{
char s;
for(s=4;s>=0;s--) //i为向后先择字节计数器,zimuoo为向后先字计数器
{
BUFF[2*s+1]=hanzi[zimuo+32*s+2*line]; //把第一个字模的第一个字节放入BUFF0中,第二个字模和第一个字节放入BUFF2中
BUFF[2*s]=hanzi[zimuo+1+32*s+2*line]; //把第一个字模的第二个字节放入BUFF1中,第二个字模的第二个字节放入BUFF3中
}
}
/***********************发送移动的数据****************************/
void rxd_data(void) //串行发送数据
{
uchar s;
uchar inc,tempyid,temp;
if(Move<8)
inc=0;
else
inc=1;
for(s=0+inc;s<8+inc;s++) //发送8字节数据
{
if(Move<8)
tempyid=Move;
else
tempyid=Move-8;
temp=(BUFF[s]>>tempyid)|(BUFF[s+1]<<(8-tempyid)); //h1左移tempyid位后和h2右移8-tempyid相或,取出移位后的数据。
SBUF=temp;
while(TI==0);
TI=0;
}
}
/*主函数*/
void main()
{
Move=0;
TMOD=0x01; //16位定时
TH0=0x3c; //25ms晶振为24M
TL0=0xb0;
EA=1;
TR0=1;
ET0=1;
SCON=0; //初始化串口为工作方式0(同步通信方式,TxD输出同步脉冲)
Send_data(0x00);
while(1){
zimuo=0;
while(zimuo<word_lenth)
{
while(Move<16) //数据移位。
{
for(Speed=0;Speed<MOVESPEED;Speed++) //移动速度
{
for(line=0;line<16;line++)
{
in_data(); //调整移动数据
PORT&=0x0f;
PORT|=sw[line];
rxd_data();//输出行信号
LE=0;
_nop_();
LE=1;
_nop_();
LE=0;
OE=0;
DelayMs();//延时,等待一段时间,让这列显示的内容在人眼内产生“视觉暂留”现象
///关闭显示
OE=1;
}
}
Move++; //移动一步
}
Move=0;
zimuo=zimuo+32;
}
//重复循环显示
}
}
void timer_1(void) interrupt 1 //中断入口,闪烁
{
TH0=0x3C; //25ms定时 晶振24M
TL0=0xB0;
if(msec++==40) //1000ms
{ msec=0;
x++;
if(x>=a)
{ x=0;
if(b==0) //自动模式
{if(f++==3)
f=0; //f显示转换计数器 ,d为用户设置的自动转换时间的值。
}
}
if(h++==4) //5秒后进入正常走时。
{id=0;h=0;}
}
if(msec<20)
Flicker=0; //闪烁标志反转
else
Flicker=1;
}
/*******************************************************/
void Send_data(unsigned char *d) /*从串口发送数据*/
{
SBUF=*d;
while(TI==0); //等待发送完毕
TI=0;
}
const uchar code timer[11][16]={ /*0~9字符*/
/*-- 文字: 0 --*/
/*-- Book Antiqua12; 此字体下对应的点阵为:宽x高=8x20 --*/
0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x24,0x18,0x00,0x00,0x00,/*"0",0*/
/*-- 文字: 1 --*/
/*-- Book Antiqua12; 此字体下对应的点阵为:宽x高=8x20 --*/
0x00,0x00,0x3E,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x0E,0x08,0x00,0x00,0x00,/*"1",0*/
/*-- 文字: 2 --*/
/*-- Book Antiqua12; 此字体下对应的点阵为:宽x高=8x20 --*/
0x00,0x00,0x7E,0x42,0x04,0x08,0x10,0x20,0x20,0x42,0x42,0x42,0x3C,0x00,0x00,0x00,/*"2",0*/
/*-- 文字: 3 --*/
/*-- Book Antiqua12; 此字体下对应的点阵为:宽x高=8x20 --*/
0x00,0x00,0x1C,0x22,0x42,0x40,0x40,0x20,0x18,0x20,0x42,0x42,0x3C,0x00,0x00,0x00,/*"3",0*/
/*-- 文字: 4 --*/
/*-- Book Antiqua12; 此字体下对应的点阵为:宽x高=8x20 --*/
0x00,0x00,0x78,0x20,0x20,0x7E,0x22,0x22,0x24,0x24,0x28,0x30,0x20,0x00,0x00,0x00,/*"4",0*/
/*-- 文字: 5 --*/
/*-- Book Antiqua12; 此字体下对应的点阵为:宽x高=8x20 --*/
0x00,0x00,0x1C,0x22,0x42,0x40,0x40,0x26,0x1A,0x02,0x02,0x02,0x7E,0x00,0x00,0x00,/*"5",0*/
/*-- 文字: 6 --*/
/*-- Book Antiqua12; 此字体下对应的点阵为:宽x高=8x20 --*/
0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x26,0x1A,0x02,0x02,0x24,0x38,0x00,0x00,0x00,/*"6",0*/
/*-- 文字: 7 --*/
/*-- Book Antiqua12; 此字体下对应的点阵为:宽x高=8x20 --*/
0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x10,0x10,0x22,0x22,0x7E,0x00,0x00,0x00,/*"7",0*/
/*-- 文字: 8 --*/
/*-- Book Antiqua12; 此字体下对应的点阵为:宽x高=8x20 --*/
0x00,0x00,0x3C,0x42,0x42,0x42,0x24,0x18,0x24,0x42,0x42,0x42,0x3C,0x00,0x00,0x00,/*"8",0*/
/*-- 文字: 9 --*/
/*-- Book Antiqua12; 此字体下对应的点阵为:宽x高=8x20 --*/
0x00,0x00,0x1C,0x24,0x40,0x40,0x58,0x64,0x42,0x42,0x42,0x24,0x18,0x00,0x00,0x00,/*"9",0*/
/*-- 文字: : --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,/*":",0*/
};
const uchar code hanzi[]={/*移动显示汉字字模,*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//1
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//2
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//3
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//4
0x00,0x00,0x60,0x3C,0xF0,0xE3,0x39,0x86,
0x1B,0x6C,0x0F,0x6C,0x0E,0x38,0x06,0x38,
0x06,0x18,0x06,0x3C,0x36,0xF6,0x61,0xE3,
0xFF,0xE0,0x03,0x7F,0x03,0x00,0x03,0x00,/*"欢",0*/
0x00,0x00,0xFF,0xF3,0x00,0x1E,0x06,0x0C,
0x06,0x0C,0x36,0x6C,0x7E,0xEC,0x67,0xEC,
0x66,0x6C,0x66,0x6F,0x66,0x60,0x66,0x60,
0x66,0x6C,0x7E,0xFC,0x03,0x8C,0x00,0x06,/*"迎",1*/
0x00,0x06,0xFC,0x0C,0xC6,0x18,0xC6,0x30,
0xC6,0x30,0x06,0x60,0x06,0x60,0x06,0x60,
0x06,0x60,0xFF,0xFE,0x61,0x80,0x0D,0xB0,
0x19,0xF0,0x39,0xB8,0x19,0x8C,0x01,0x80,/*"光",2*/
0x00,0x00,0x61,0xB0,0x7F,0xB0,0x6D,0xB6,
0x6D,0xB6,0x6D,0xB6,0x6D,0xB6,0xFF,0xB6,
0x61,0xB6,0x18,0x76,0x18,0xF6,0x0C,0xF6,
0xFF,0xB6,0x01,0xB0,0x03,0xB0,0x01,0x80,/*"临",3*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//1
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//2
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//3
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//4
//
0x30,0x0C,0x78,0x0C,0x60,0x0C,0x60,0x0C,
0x60,0x1C,0x78,0x3C,0x78,0x6C,0x6C,0xCC,
0x66,0xCC,0x63,0x8C,0x61,0x8C,0x61,0x8C,
0x7F,0xFC,0x01,0x80,0x01,0x80,0x01,0x80,/*"内",0*/
0x06,0x18,0x0F,0x18,0x0C,0x18,0x0C,0x18,
0x0C,0x18,0x0C,0x1B,0xFF,0xFE,0x0C,0x1C,
0x0C,0x18,0x18,0x38,0x3F,0xF0,0x00,0x60,
0x00,0x60,0x7F,0xFE,0x00,0xC0,0x01,0xC0,/*"存",1*/
0x01,0x80,0x01,0x80,0x31,0x80,0x71,0x80,
0x39,0x80,0x1D,0x80,0x07,0x80,0x01,0x80,
0x01,0x80,0xFF,0xFE,0x01,0x80,0x01,0x80,
0x01,0x80,0x7F,0x80,0x01,0x80,0x01,0x80,/*"卡",2*/
0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x1C,
0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"、",3*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -