?? 001.c
字號:
/*****************************************************
16字LED點陣屏+DS1302電子鐘 C 程序(修改板)
******************************************************
聲明:
本程序中DS1302讀寫部分是直接引用網上網友提供的共享程序,
本程序供大家學習之用,用勿用于商業用途。尊重作者版權。
編寫:鄧椿薪
時間:2006年1月28日 晚
郵箱:love2151@xinhuanet.com
*******************************************************
DS1302 接線圖
Vcc2 CLK I/O /RST
| | | |
-------------------
| 8 7 6 5 |
| DS1302 |
| |
| 1 2 3 4 |
-------------------
| | | |
VCC1 GND
1 腳接+5V 2,3腳32768HZ晶振 4腳接地 5腳接S51的P02 6腳接S51的P01 7接S51的P00
8腳接后備電源,可以接老計算機主板上的3.6V電池,也可以通過二級管隔離接一個大容量電解電容
電壓在2.5V以上即可維持
595連級輸出數據,138行驅動。*/
#include <AT89x51.H>
#define uchar unsigned char
#define uint unsigned int
uchar code timer[12][16]={ /*0~9字符*/
/*-- 文字: 0 --*/
/*-- Book Antiqua12; 此字體下對應的點陣為:寬x高=8x20 --*/
0xFF,0xFF,0xFF,0xE7,0xDB,0xBD,0xBD,0xBD,0xBD,0xBD,0xBD,0xBD,0xDB,0xE7,0xFF,0xFF,
/*-- 文字: 1 --*/
/*-- Book Antiqua12; 此字體下對應的點陣為:寬x高=8x20 --*/
0xFF,0xFF,0xFF,0xEF,0xE1,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0x83,0xFF,0xFF,
/*-- 文字: 2 --*/
/*-- Book Antiqua12; 此字體下對應的點陣為:寬x高=8x20 --*/
0xFF,0xFF,0xFF,0xE3,0xDD,0xDD,0xDF,0xDF,0xEF,0xEF,0xF7,0xFB,0xFD,0x80,0xFF,0xFF,
/*-- 文字: 3 --*/
/*-- Book Antiqua12; 此字體下對應的點陣為:寬x高=8x20 --*/
0xFF,0xFF,0xFF,0xE1,0xDE,0xDE,0xDF,0xEF,0xC3,0xBF,0xBF,0xBE,0xDE,0xE1,0xFF,0xFF,
/*-- 文字: 4 --*/
/*-- Book Antiqua12; 此字體下對應的點陣為:寬x高=8x20 --*/
0xFF,0xFF,0xFF,0xDF,0xCF,0xD7,0xD7,0xDB,0xDD,0xDD,0x00,0xDF,0xDF,0x07,0xFF,0xFF,
/*-- 文字: 5 --*/
/*-- Book Antiqua12; 此字體下對應的點陣為:寬x高=8x20 --*/
0xFF,0xFF,0xFF,0xC1,0xFD,0xFD,0xFD,0xC1,0xBD,0xBF,0xBF,0xBE,0xDE,0xE1,0xFF,0xFF,
/*-- 文字: 6 --*/
/*-- Book Antiqua12; 此字體下對應的點陣為:寬x高=8x20 --*/
0xFF,0xFF,0xFF,0xDF,0xE7,0xFB,0xFD,0xC5,0xB9,0xBD,0xBD,0xBD,0xDB,0xE7,0xFF,0xFF,
/*-- 文字: 7 --*/
/*-- Book Antiqua12; 此字體下對應的點陣為:寬x高=8x20 --*/
0xFF,0xFF,0xFF,0x01,0xBD,0xBD,0xDF,0xEF,0xEF,0xF7,0xF7,0xFB,0xFB,0xFD,0xFF,0xFF,
/*-- 文字: 8 --*/
/*-- Book Antiqua12; 此字體下對應的點陣為:寬x高=8x20 --*/
0xFF,0xFF,0xFF,0xE3,0xDD,0xBE,0xBE,0xDD,0xC1,0xBE,0xBE,0xBE,0xDD,0xE3,0xFF,0xFF,
/*-- 文字: 9 --*/
/*-- Book Antiqua12; 此字體下對應的點陣為:寬x高=8x20 --*/
0xFF,0xFF,0xFF,0xE7,0xDB,0xBD,0xBD,0xBD,0x9B,0xA7,0xDF,0xDF,0xEF,0xF1,0xFF,0xFF,
/*-- 文字: : --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=8x16 --*/
0xFF,0xFF,0xFF,0xFF,0xFF,0xE7,0xE7,0xFF,0xFF,0xFF,0xE7,0xE7,0xFF,0xFF,0xFF,0xFF,
/*黑屏字符*/
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
};
uchar code hanzi[18][32]={ /*漢字字模*/
/*-- 文字: 年 --*/
/*-- 華文新魏12; 此字體下對應的點陣為:寬x高=16x17 --*/
0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0xF8,0x1F,0xFC,0x5F,0xE0,0xEF,0xFC,0x1F,0xFD,0x0F,
0xC1,0x3F,0xFC,0x07,0xFE,0xF3,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,
/*-- 文字: 月 --*/
/*-- 華文新魏12; 此字體下對應的點陣為:寬x高=16x17 --*/
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0x7F,0xFB,0x3F,0xFB,0xBF,0xFA,0x3F,0xFB,0xBF,
0xFA,0x3F,0xFB,0x9F,0xFB,0xDF,0xFB,0xEF,0xFA,0xE7,0xF9,0xFB,0xFF,0xFF,0xFF,0xFF,
/*-- 文字: 星 --*/
/*-- 華文新魏12; 此字體下對應的點陣為:寬x高=16x17 --*/
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0x7F,0xF0,0x9F,0xF3,0x5F,0xFA,0xDF,0xF8,0x3F,
0xFE,0xBF,0xF8,0x1F,0xFC,0xCF,0xFC,0x2F,0xFE,0xFF,0xC0,0x1F,0xFF,0xEF,0xFF,0xFF,
/*-- 文字: 期 --*/
/*-- 華文新魏12; 此字體下對應的點陣為:寬x高=16x17 --*/
0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0xFF,0x5F,0xE2,0x1F,0xED,0x47,0xE9,0x4F,0xED,0x6F,
0xE9,0x5F,0xEC,0x0F,0xEE,0xB1,0xEE,0x6F,0xEE,0xF7,0xE7,0x7F,0xFF,0xFF,0xFF,0xFF,
/*-- 文字: 時 --*/
/*-- 華文新魏12; 此字體下對應的點陣為:寬x高=16x17 --*/
0xFF,0xFF,0xFF,0xFF,0xF7,0xFF,0xF7,0xFF,0xF6,0x1F,0xF7,0x6F,0xC3,0x6F,0xF4,0x4F,
0xF6,0x6F,0xF7,0x0F,0xF7,0x6F,0xF7,0x33,0xF6,0x7F,0xF1,0xFF,0xF7,0xFF,0xFF,0xFF,
/*-- 文字: 分 --*/
/*-- 華文新魏12; 此字體下對應的點陣為:寬x高=16x17 --*/
0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0xFE,0xFF,0xFD,0xBF,0xFB,0xBF,0xF3,0x9F,0xE7,0xDF,
0x80,0x0F,0x1B,0x27,0xFB,0x7F,0xF9,0xBF,0xFD,0x9F,0xFC,0x6F,0xFF,0xFF,0xFF,0xFF,
/*-- 文字: 秒 --*/
/*-- 華文新魏12; 此字體下對應的點陣為:寬x高=16x17 --*/
0xFF,0xFF,0xFF,0xFF,0xFB,0xFF,0xFB,0xBF,0xFB,0xCF,0xFB,0x9F,0xCA,0x87,0x8A,0x89,
0xF3,0xCF,0xF3,0xD3,0xFB,0xD9,0xFD,0xDF,0xFE,0xDF,0xFF,0x7F,0xFF,0x1F,0xFF,0xFF,
/*-- 文字: 時 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0xF7,0xFF,0xF7,0xFF,0xF7,0xC1,0xF7,0xDD,0x80,0x1D,0xF7,0xDD,0xF7,0xC1,0xF7,0x5D, //7
0xF6,0xDD,0xF6,0xDD,0xF7,0xC1,0xF7,0xFF,0xF7,0xFF,0xF7,0xFF,0xF5,0xFF,0xFB,0xFF,
/*-- 文字: 間 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0xFF,0xFB,0xC0,0x37,0xDF,0xF7,0xDF,0xFD,0xD8,0x1D,0xDB,0xDD,0xDB,0xDD,0xD8,0x1D, //8
0xDB,0xDD,0xDB,0xDD,0xD8,0x1D,0xDF,0xFD,0xDF,0xFD,0xDF,0xFD,0xD7,0xFD,0xEF,0xFD,
/*-- 文字: 設 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0xFF,0xFD,0xF0,0x7B,0xF7,0x73,0xF7,0x7B,0xF7,0x7F,0xF7,0x7F,0x8F,0xB8,0xE0,0x5B, //9
0xEF,0x7B,0xEF,0x7B,0xF6,0xFB,0xF6,0xFB,0xF9,0xEB,0xF6,0xF3,0x8F,0x3B,0xDF,0xCF,
/*-- 文字: 定 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0xFF,0xBF,0xFF,0x7F,0x80,0x03,0xDF,0xFB,0xEF,0xFD,0xF0,0x07,0xFF,0x7F,0xFF,0x77, //10
0xFF,0x77,0xF0,0x77,0xFF,0x77,0xFF,0x6B,0xFF,0x5B,0xFF,0x3D,0xC0,0x7E,0xFF,0xFF,
/*-- 文字: 一 --*/
/*-- 華文新魏12; 此字體下對應的點陣為:寬x高=16x17 --*/
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,0x7F,
0xE0,0x03,0xDF,0xC3,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
/*-- 文字: 二 --*/
/*-- 華文新魏12; 此字體下對應的點陣為:寬x高=16x17 --*/
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0x1F,0xFC,0x1F,0xFF,0xDF,
0xFF,0xFF,0xE3,0xFF,0xC0,0x0F,0xDF,0x83,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
/*-- 文字: 三 --*/
/*-- 華文新魏12; 此字體下對應的點陣為:寬x高=16x17 --*/
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0x3F,0xFE,0x3F,0xFF,0xFF,
0xFC,0x3F,0xFF,0xBF,0xFF,0xFF,0xC0,0x3F,0xFF,0xC3,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
/*-- 文字: 四 --*/
/*-- 華文新魏12; 此字體下對應的點陣為:寬x高=16x17 --*/
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0x7F,0x8C,0x07,0xCC,0xB7,
0xCD,0xB7,0xEF,0xEF,0xE4,0x0F,0xF3,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
/*-- 文字: 五 --*/
/*-- 華文新魏12; 此字體下對應的點陣為:寬x高=16x17 --*/
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFB,0xFF,0xF8,0x1F,0xFE,0x3F,0xFE,0x7F,0xF0,0x7F,
0xF9,0x0F,0xF9,0x3F,0xFD,0xBF,0xC0,0x1F,0xC7,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
/*-- 文字: 六 --*/
/*-- 華文新魏12; 此字體下對應的點陣為:寬x高=16x17 --*/
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,0xFE,0x3F,0xFE,0xFF,0xC1,0xFF,0x80,0x1F,
0xFF,0x01,0xFD,0xDD,0xF3,0x9F,0xE3,0xCF,0xE7,0xE7,0xFF,0xF7,0xFF,0xFF,0xFF,0xFF,
/*-- 文字: 日 --*/
/*-- 華文新魏12; 此字體下對應的點陣為:寬x高=16x17 --*/
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x3F,0xF1,0x9F,0xF1,0xDF,
0xF1,0x1F,0xF1,0xDF,0xF1,0xDF,0xF1,0x1F,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
};
uchar code sw[16]={0x60,0x62,0x64,0x66,0x68,0x6a,0x6c,0x6e,
0x70,0x72,0x74,0x76,0x78,0x7a,0x7c,0x7e}; /*16行段碼*/
void xs_out(); /*輸出顯示*/
void out_rxd(unsigned char *d); /*串口發送一行*/
/******************************************/
sbit resget=P1^3; //時鐘復位
sbit key_moda=P1^0; //模式轉換
sbit key_up=P1^1; //時鐘加
sbit key_Down=P1^2; //時鐘減
sbit T_CLK=P1^7; //DS1302引腳連接
sbit T_IO =P1^6;
sbit T_RST=P1^5;
sbit ACC0=ACC^0; //1bit數據存儲位
sbit ACC7=ACC^7;
uchar inittime[7]={0x00,0x10,0x22,0x13,0x01,0x05,0x06}; //初始化后設置為:06年1月12日星期4 21點0分0秒
uchar i,e,id,miao,fen,shi,nian,yue,ri,xinqi; //時間變量
uint ss;
void RTInputByte(uchar); /* 輸入 1Byte */
uchar RTOutputByte(void); /* 輸出 1Byte */
void W1302(uchar, uchar); // 向DS1302寫入一個字節
uchar R1302(uchar); // 從DS1302讀出一個字節
void Set1302(uchar *); // 寫DS1302時間
void du1302(); // 讀時間
void DelayMs(void); // 延時
void id_case1_key(); // 加減選取
void Set(uchar,uchar ); // 變量調整
/*主函數*/
void main()
{
SCON=0; //初始化串口為工作方式0(同步通信方式,TxD輸出同步脈沖)
while(1) //重復循環顯示
{
if(resget==0)
{DelayMs();
if(resget==0)
Set1302(inittime); //初始化
W1302(0x8e,0x00); /* 控制命令,WP=0,寫操作?*/
W1302(0x90,0xa5); //打開充電二級管 一個二級管串聯一個2K電阻
}
if (key_moda==0) // 設置和選擇項目鍵
{DelayMs();
if(key_moda==0)
{
id++;if(id==8) id=0;
while(key_moda==0){ xs_out();}
}
}
id_case1_key();
du1302(); //讀取 秒 分 時 日 月 星期 年
xs_out(); /******調用顯示****/
}
}
/************************************************/
void xs_out() //串行輸出顯示
{
for(i=0;i<16;i++)
{
P2=0x7f;
ss++; //ss為閃爍延時計數器
if (ss==1500) //定義SS的大小決定調整時閃爍的快慢,小于750時為亮,大于750時為黑
{ss=0;}
out_rxd(&timer[11]); //不顯示
if(id==1&&ss>750) //當ID為1和SS大于1000時年不顯示。
{
out_rxd(&timer[11]); //不顯示
out_rxd(&timer[11]); //不顯示
out_rxd(&timer[11]); //不顯示
out_rxd(&timer[11]); //不顯示
}
else
{
out_rxd(&timer[2]); //20年
out_rxd(&timer[0]);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -