久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2721|回復: 0
收起左側

數(shù)字時鐘設計源代碼

[復制鏈接]
ID:295555 發(fā)表于 2018-3-22 16:45 來自觸屏版 | 顯示全部樓層 |閱讀模式
最近寫了一個時鐘的代碼,嘿嘿
#include <REG51.H>
#include <intrins.h>
//#include "LCD1602.h"
//#include "DS1302.h"
#define uint unsigned int
#define uchar unsigned char
sbit DS1302_CLK = P1^7; //實時時鐘時鐘線引腳
sbit DS1302_IO = P1^6; //實時時鐘數(shù)據(jù)線引腳
sbit DS1302_RST = P1^5; //實時時鐘復位線引腳
sbit wireless_1 = P3^0;
sbit wireless_2 = P3^1;
sbit wireless_3 = P3^2;
sbit wireless_4 = P3^3;
sbit ACC0 = ACC^0;
sbit ACC7 = ACC^7;
char hide_sec,hide_min,hide_hour,hide_day,hide_week,hide_month,hide_year; //秒 , 分 , 時到日 , 月 , 年位閃的計 數(shù)
sbit Set = P2^0; //模式切換鍵
sbit Up = P2^1; //加法按鈕
sbit Down = P2^2; //減法按鈕
sbit out = P2^3; //立刻跳出調(diào)整模式按鈕
sbit DQ = P1^0; //溫度傳送數(shù)據(jù) IO 口
char done,count,temp,flag,up_flag,down_flag;
uchar temp_value; //溫度值
uchar TempBuffer[5],week_value[2];
void show_time(); //液晶顯示程序
/***********1602液晶顯示部分子程序 ****************/
//Port Definitions**********************************************************
sbit LcdRs = P2^5;
sbit LcdRw = P2^6;
sbit LcdEn = P2^7;
sfr DBPort = 0x80; //P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.數(shù)據(jù)端口
//內(nèi)部等待函數(shù) ************************************************************************** unsigned char LCD_Wait(void)
{
LcdRs=0;
LcdRw=1; _nop_();
LcdEn=1; _nop_();
LcdEn=0;
return DBPort;
}
//向 LCD 寫入命令或數(shù)據(jù) ************************************************************ #define LCD_COMMAND 0 // Command
#define LCD_DATA 1 // Data
#define LCD_CLEAR_SCREEN 0x01 // 清屏
#define LCD_HOMING 0x02 // 光標返回原點
void LCD_Write(bit style, unsigned char input)
{
LcdEn=0;
LcdRs=style;
LcdRw=0; _nop_();
DBPort=input; _nop_();//注意順序
LcdEn=1; _nop_();//注意順序
LcdEn=0; _nop_();
LCD_Wait();
}
//設置顯示模式 ************************************************************
#define LCD_SHOW 0x04 //顯示開
#define LCD_HIDE 0x00 //顯示關
#define LCD_CURSOR 0x02 //顯示光標
#define LCD_NO_CURSOR 0x00 //無光標
#define LCD_FLASH 0x01 //光標閃動
#define LCD_NO_FLASH 0x00 //光標不閃動
void LCD_SetDisplay(unsigned char DisplayMode)
{
LCD_Write(LCD_COMMAND, 0x08|DisplayMode);
}
//設置輸入模式 ************************************************************
#define LCD_AC_UP 0x02
#define LCD_AC_DOWN 0x00 // default
#define LCD_MOVE 0x01 // 畫面可平移
#define LCD_NO_MOVE 0x00 //default
void LCD_SetInput(unsigned char InputMode)
{
LCD_Write(LCD_COMMAND, 0x04|InputMode);
}
//初始化 LCD************************************************************ void LCD_Initial()
{
LcdEn=0;
LCD_Write(LCD_COMMAND,0x38); //8位數(shù)據(jù)端口 ,2行顯示 ,5*7點陣 LCD_Write(LCD_COMMAND,0x38);
LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); //開啟顯示 , 無光標
LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); //清屏
LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); //AC遞增 , 畫面不動 }
//液晶字符輸入的位置 ************************
void GotoXY(unsigned char x, unsigned char y)
{
if(y==0)
LCD_Write(LCD_COMMAND,0x80|x);
if(y==1)
LCD_Write(LCD_COMMAND,0x80|(x-0x40));
}
//將字符輸出到液晶顯示
void Print(unsigned char *str)
{
while(*str!='\0')
{
LCD_Write(LCD_DATA,*str);
str++;
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////
/***********DS1302時鐘部分子程序 ******************/
typedef struct __SYSTEMTIME__
{
unsigned char Second;
unsigned char Minute;
unsigned char Hour;
unsigned char Week;
unsigned char Day;
unsigned char Month;
unsigned char Year;
unsigned char DateString[11];
unsigned char TimeString[9];
}SYSTEMTIME; //定義的時間類型
SYSTEMTIME CurrentTime;
#define AM(X) X
#define PM(X) (X+12) // 轉(zhuǎn)成 24小時制
#define DS1302_SECOND 0x80 //時鐘芯片的寄存器位置 , 存放時間 #define DS1302_MINUTE 0x82
#define DS1302_HOUR 0x84
#define DS1302_WEEK 0x8A
#define DS1302_DAY 0x86
#define DS1302_MONTH 0x88
#define DS1302_YEAR 0x8C
void DS1302InputByte(unsigned char d) //實時時鐘寫入一字節(jié) (內(nèi)部函數(shù) ) {
unsigned char i;
ACC = d;
for(i=8; i>0; i--)
{
DS1302_IO = ACC0; //相當于匯編中的 RRC
DS1302_CLK = 1;
DS1302_CLK = 0;
ACC = ACC >> 1;
}
}
unsigned char DS1302OutputByte(void) //實時時鐘讀取一字節(jié) (內(nèi)部函數(shù) ) {
unsigned char i;
for(i=8; i>0; i--)
{
ACC = ACC >>1; //相當于匯編中的 RRC ACC7 = DS1302_IO;
DS1302_CLK = 1;
DS1302_CLK = 0;
}
return(ACC);
}
void Write1302(unsigned char ucAddr, unsigned char ucDa) //ucAddr: DS1302地址 , ucData: 要寫的數(shù)據(jù) {
DS1302_RST = 0; // Write1302(0x8e,0x00);
DS1302_CLK = 0;
DS1302_RST = 1;
DS1302InputByte(ucAddr); // 地址,命令
DS1302InputByte(ucDa); // 寫 1Byte 數(shù)據(jù)
DS1302_CLK = 1;
DS1302_RST = 0;
}
unsigned char Read1302(unsigned char ucAddr) //讀取 DS1302某地址的數(shù)據(jù)
{
unsigned char ucData;
DS1302_RST = 0;
DS1302_CLK = 0;
DS1302_RST = 1;
DS1302InputByte(ucAddr|0x01); // 地址,命令
ucData = DS1302OutputByte(); // 讀 1Byte 數(shù)據(jù)
DS1302_CLK = 1;
DS1302_RST = 0;
return(ucData);
}
void DS1302_GetTime(SYSTEMTIME *Time) //獲取時鐘芯片的時鐘數(shù)據(jù)到自定義的結構型數(shù)組 {
unsigned char ReadValue;
ReadValue = Read1302(DS1302_SECOND);
Time->Second = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); //高三位取出讀出乘⑩
ReadValue = Read1302(DS1302_MINUTE);
Time->Minute = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
ReadValue = Read1302(DS1302_HOUR);
Time->Hour = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
ReadValue = Read1302(DS1302_DAY);
Time->Day = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
ReadValue = Read1302(DS1302_WEEK);
Time->Week = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
ReadValue = Read1302(DS1302_MONTH);
ReadValue = Read1302(DS1302_YEAR);
Time->Year = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
}
void DateToStr(SYSTEMTIME *Time) //將時間年 , 月 , 日 , 星期數(shù)據(jù)轉(zhuǎn)換成液晶顯示字符串 , 放到數(shù)組里 DateString[]
{
if(hide_year<2) //這里的 if,else 語句都是判斷位閃爍 ,<2顯示數(shù)據(jù) ,>2就不顯示 , 輸出字符串 為 2007/07/22
{
Time->DateString[0] = '2';
Time->DateString[1] = '0';
Time->DateString[2] = Time->Year/10 + '0';
Time->DateString[3] = Time->Year%10 + '0';
}
else
{
Time->DateString[0] = ' ';
Time->DateString[1] = ' ';
Time->DateString[2] = ' ';
Time->DateString[3] = ' ';
}
Time->DateString[4] = '/';
if(hide_month<2)
{
Time->DateString[5] = Time->Month/10 + '0';
Time->DateString[6] = Time->Month%10 + '0';
}
else
{
Time->DateString[6] = ' ';
}
Time->DateString[7] = '/';
if(hide_day<2)
{
Time->DateString[8] = Time->Day/10 + '0';
Time->DateString[9] = Time->Day%10 + '0';
}
else
{
Time->DateString[8] = ' ';
Time->DateString[9] = ' ';
}
if(hide_week<2)
{
week_value[0] = Time->Week%10 + '0'; //星期的數(shù)據(jù)另外放到 week_value[]數(shù)組里 , 跟年 , 月 , 日的分 開存放 , 因為等一下要在最后顯示
}
else
{
week_value[0] = ' ';
}
week_value[1] = '\0';
Time->DateString[10] = '\0'; //字符串末尾加 '\0' ,判斷結束字符
}
void TimeToStr(SYSTEMTIME *Time) //將時 , 分 , 秒數(shù)據(jù)轉(zhuǎn)換成液晶顯示字符放到數(shù)組 TimeString[]; {
if(hide_hour<2)
{
Time->TimeString[0] = Time->Hour/10 + '0';
Time->TimeString[1] = Time->Hour%10 + '0';
}
else
{
Time->TimeString[0] = ' ';
Time->TimeString[1] = ' ';
}
Time->TimeString[2] = ':';
if(hide_min<2)
{
Time->TimeString[3] = Time->Minute/10 + '0'; Time->TimeString[4] = Time->Minute%10 + '0'; }
else
{
Time->TimeString[3] = ' ';
Time->TimeString[4] = ' ';
}
Time->TimeString[5] = ':';
if(hide_sec<2)
{
Time->TimeString[6] = Time->Second/10 + '0'; Time->TimeString[7] = Time->Second%10 + '0'; }
else
{
Time->TimeString[6] = ' ';
Time->TimeString[7] = ' ';
}
Time->DateString[8] = '\0';
}
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美成人精品激情在线观看 | 午夜一级黄色片 | 国产成人99久久亚洲综合精品 | 久久99视频免费观看 | 日韩爱爱网站 | 最新国产精品精品视频 | 精品国产伦一区二区三区观看说明 | 美女午夜影院 | 国产精品国产三级国产aⅴ浪潮 | 国产成人精品一区二 | 久久99精品视频 | 韩国精品一区二区三区 | 成人欧美一区二区三区黑人孕妇 | 色视频www在线播放国产人成 | 在线国产中文字幕 | 三区在线观看 | 91精品国产一区二区三区动漫 | 久久国产美女视频 | 久久久www| 超碰国产在线 | 在线观看你懂的网站 | 国产欧美日韩综合精品一区二区 | 日韩一区二区三区在线观看 | 国产精品久久精品 | 亚洲成人精品国产 | 欧美精品黄 | 一区二区三区四区国产 | 精品日韩一区二区 | 91看片网站 | 99这里只有精品视频 | 妞干网av | 国产探花在线精品一区二区 | 亚洲欧美综合精品久久成人 | 久久99视频这里只有精品 | 蜜桃一区二区三区 | 日韩精品一区二区三区中文在线 | 91av在线电影 | 一区二区视频 | 国产福利在线 | 波多野结衣二区 | 一本久久a久久精品亚洲 |