當(dāng)前位置:首頁 > 技術(shù)學(xué)院 > 熱搜器件
[導(dǎo)讀]簡易版的多功能電子鐘

一:作品描述:
電子時(shí)鐘主要是利用電子技術(shù)將時(shí)鐘電子化、數(shù)字化,擁有時(shí)鐘精確、體積小、界面友好、可擴(kuò)展性能強(qiáng)等特點(diǎn),被廣泛應(yīng)用于生活和工作當(dāng)中。
作品的設(shè)計(jì)主要為實(shí)現(xiàn)一款可正常顯示時(shí)鐘/日歷、可手動(dòng)調(diào)時(shí)間和日歷、帶有定時(shí)鬧鈴的多功能電子時(shí)鐘。作品應(yīng)用AT89C52芯片作為核心,顯示部分使用字符液晶LCD1602顯示屏進(jìn)行顯示時(shí)間,使用DS1302實(shí)時(shí)時(shí)鐘日歷芯片完成時(shí)鐘/日歷的基本功能。這種實(shí)現(xiàn)方法的優(yōu)點(diǎn)是電路簡單,性能可靠,實(shí)時(shí)性好,時(shí)間精度高,操作簡單,編程容易。
本設(shè)計(jì)電子時(shí)鐘主要功能為:
具有時(shí)間顯示和手動(dòng)校對(duì)功能,24小時(shí)制;
具有年、月、日顯示和手動(dòng)校對(duì)功能;
具有鬧鈴功能;
掉電后無需重新設(shè)置時(shí)間和日期。
二、制作進(jìn)度:
小組的四個(gè)人都是大一的學(xué)生,都是單片機(jī)的新手,在時(shí)間很是緊張地情況下,我們是按著預(yù)先的計(jì)劃一步一步走過來的。按照事先的設(shè)想,先做個(gè)簡易版的電子鐘,只是具有時(shí)間顯示和手動(dòng)校對(duì)功能(24小時(shí)制)和具有年、月、日顯示和手動(dòng)校對(duì)功能,這樣可以增強(qiáng)信心,為后來加入更多功能做好基礎(chǔ)。后再在這個(gè)基礎(chǔ)上加上鬧鐘的功能,有時(shí)間的話,我們組的還會(huì)加上溫度檢測等功能。

三:已經(jīng)運(yùn)用到的代碼:
把程序分成每個(gè)模塊,每個(gè)模塊再進(jìn)行一一調(diào)試,面對(duì)錯(cuò)誤就上網(wǎng)找相關(guān)的資料和師兄解決問題。
1.程序流程框圖:
             
2.源代碼是:
#include <REG51.H>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit  DS1302_CLK = P1^7;              //實(shí)時(shí)時(shí)鐘時(shí)鐘線引腳
sbit  DS1302_IO  = P1^6;              //實(shí)時(shí)時(shí)鐘數(shù)據(jù)線引腳
sbit  DS1302_RST = P1^5;              //實(shí)時(shí)時(shí)鐘復(fù)位線引腳
sbit  ACC0 = ACC^0;
sbit  ACC7 = ACC^7;
char hide_sec,hide_min,hide_hour,hide_day,hide_week,hide_month,hide_year; //秒,分,時(shí)到日,月,年位閃的計(jì)數(shù)
sbit Set = P2^0;       //模式切換鍵
sbit Up = P2^1;        //加法按鈕
sbit Down = P2^2;      //減法按鈕
sbit out = P2^3;       //立刻跳出調(diào)整模式按鈕
char done,count,temp,flag,up_flag,down_flag;
uchar TempBuffer[5],week_value[2];
void show_time();   //液晶顯示程序
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      // 光標(biāo)返回原點(diǎn)
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();
}
//設(shè)置顯示模式************************************************************
#define LCD_SHOW 0x04    //顯示開
#define LCD_HIDE 0x00    //顯示關(guān) 
#define LCD_CURSOR 0x02 //顯示光標(biāo)
#define LCD_NO_CURSOR 0x00    //無光標(biāo)    
#define LCD_FLASH 0x01    //光標(biāo)閃動(dòng)
#define LCD_NO_FLASH 0x00    //光標(biāo)不閃動(dòng)
void LCD_SetDisplay(unsigned char DisplayMode)
{
LCD_Write(LCD_COMMAND, 0x08|DisplayMode);
}
//設(shè)置輸入模式************************************************************
#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點(diǎn)陣
LCD_Write(LCD_COMMAND,0x38);
LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR);    //開啟顯示, 無光標(biāo)
LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);   //清屏
LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE);      //AC遞增, 畫面不動(dòng)
}
//液晶字符輸入的位置************************
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++;
}
}
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; //定義的時(shí)間類型
SYSTEMTIME CurrentTime;
#define AM(X) X
#define PM(X) (X+12)              // 轉(zhuǎn)成24小時(shí)制
#define DS1302_SECOND 0x80          //時(shí)鐘芯片的寄存器位置,存放時(shí)間
#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) //實(shí)時(shí)時(shí)鐘寫入一字節(jié)(內(nèi)部函數(shù))
{
unsigned char i;
ACC = d;
for(i=8; i>0; i--)
    {
DS1302_IO = ACC0;           //相當(dāng)于匯編中的 RRC
        DS1302_CLK = 1;
DS1302_CLK = 0;
ACC = ACC >> 1;
}
}
unsigned char DS1302OutputByte(void) //實(shí)時(shí)時(shí)鐘讀取一字節(jié)(內(nèi)部函數(shù))

unsigned char i;
for(i=8; i>0; i--)
    {
ACC = ACC >>1;         //相當(dāng)于匯編中的 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;
    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í)鐘芯片的時(shí)鐘數(shù)據(jù)到自定義的結(jié)構(gòu)型數(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);
Time->Month = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);
ReadValue = Read1302(DS1302_YEAR);
Time->Year = ((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); }
void DateToStr(SYSTEMTIME *Time)    //將時(shí)間年,月,日,星期數(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 + '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 + '0';
}
else
{
Time->DateString[5] = ' ';
        Time->DateString[6] = ' ';
}
Time->DateString[7] = '/';
if(hide_day<2)
{
Time->DateString[8] = Time->Day/10 + '0';
   Time->DateString[9] = Time->Day + '0';
}
else
{
Time->DateString[8] = ' ';
Time->DateString[9] = ' ';   
}
if(hide_week<2)
{
week_value[0] = Time->Week + '0'; //星期的數(shù)據(jù)另外放到 week_value[]數(shù)組里,跟年,月,日的分開存放,因?yàn)榈纫幌乱谧詈箫@示
}
else
{
week_value[0] = ' ';
}
week_value[1] = '\0';
Time->DateString[10] = '\0'; //字符串末尾加 '\0' ,判斷結(jié)束字符
}
void TimeToStr(SYSTEMTIME *Time)  //將時(shí),分,秒數(shù)據(jù)轉(zhuǎn)換成液晶顯示字符放到數(shù)組 TimeString[];
{
if(hide_hour<2)
    {
Time->TimeString[0] = Time->Hour/10 + '0';
  Time->TimeString[1] = Time->Hour + '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 + '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 + '0';
}
    else
{
Time->TimeString[6] = ' ';
Time->TimeString[7] = ' ';
}
Time->DateString[8] = '\0';
}
void Initial_DS1302(void)   //時(shí)鐘芯片初始化
{  
unsigned char Second=Read1302(DS1302_SECOND);
if(Second&0x80)      //判斷時(shí)鐘芯片是否關(guān)閉 
    {
Write1302(0x8e,0x00); //寫入允許
Write1302(0x8c,0x07); //以下寫入初始化時(shí)間 日期:07/07/25.星期: 3. 時(shí)間: 23:59:55
Write1302(0x88,0x07);Write1302(0x86,0x25);
Write1302(0x8a,0x07);Write1302(0x84,0x23);Write1302(0x82,0x59);
Write1302(0x80,0x55);Write1302(0x8e,0x80);    //禁止寫入
}
}
void Delay1ms(unsigned int count)
{
unsigned int i,j;
for(i=0;i<count;i++)
for(j=0;j<120;j++);
}
void mdelay(uint delay)
{
uint i;
for(;delay>0;delay--)
{
for(i=0;i<62;i++) //1ms延時(shí).
{;}
}
}
void outkey()                    //跳出調(diào)整模式,返回默認(rèn)顯示
{
uchar Second;
if(out==0)       
{
mdelay(8);
count=0;
hide_sec=0,hide_min=0,hide_hour=0,hide_day=0,hide_week=0,hide_month=0,hide_year=0;
Second=Read1302(DS1302_SECOND);
    Write1302(0x8e,0x00); //寫入允許
Write1302(0x80,Second&0x7f);
Write1302(0x8E,0x80);          //禁止寫入
done=0;          
while(out==0);
}
}
///////////////////////////////////////////////////////////////////////////////
void Upkey()//升序按鍵
{  
Up=1;
if(Up==0)
{
mdelay(8);
switch(count)
{
case 1:
temp=Read1302(DS1302_SECOND);  //讀取秒數(shù)
  temp=temp+1;  //秒數(shù)加1
up_flag=1;    //數(shù)據(jù)調(diào)整后更新標(biāo)志
  if((temp&0x7f)>0x59)   //超過59秒,清零
  temp=0;  
break;
  case 2:
temp=Read1302(DS1302_MINUTE);  //讀取分?jǐn)?shù)
  temp=temp+1;  //分?jǐn)?shù)加1
up_flag=1;
if(temp>0x59)          //超過59分,清零
temp=0;
break;
case 3:
  temp=Read1302(DS1302_HOUR);  //讀取小時(shí)數(shù)
temp=temp+1;  //小時(shí)數(shù)加1
up_flag=1;
if(temp>0x23)   //超過23小時(shí),清零
  temp=0;
break;
            case 4:
                temp=Read1302(DS1302_WEEK);  //讀取星期數(shù)
temp=temp+1;  //星期數(shù)加1
                up_flag=1;
if(temp>0x7) 
temp=1;
break;
case 5:
                temp=Read1302(DS1302_DAY);  //讀取日數(shù)
temp=temp+1;  //日數(shù)加1
                up_flag=1;
if(temp>0x31)
temp=1;
break;
case 6:
                temp=Read1302(DS1302_MONTH);  //讀取月數(shù)
temp=temp+1;  //月數(shù)加1
                up_flag=1;
if(temp>0x12)
temp=1;
break;
case 7:
                temp=Read1302(DS1302_YEAR);  //讀取年數(shù)
temp=temp+1;  //年數(shù)加1
                up_flag=1;
if(temp>0x85)
temp=0;
break;
default:
break;
}
while(Up==0);
}
}
///////////////////////////////////////////////////////////////////////////////
void Downkey()//降序按鍵
{   
Down=1;
if(Down==0)
{
mdelay(8);
switch(count)
{
case 1:
            temp=Read1302(DS1302_SECOND);  //讀取秒數(shù)
temp=temp-1;  //秒數(shù)減1
                down_flag=1;       //數(shù)據(jù)調(diào)整后更新標(biāo)志
if(temp==0x7f)     //小于0秒,返回59秒
temp=0x59;
break;
case 2:
                temp=Read1302(DS1302_MINUTE);  //讀取分?jǐn)?shù)
temp=temp-1;  //分?jǐn)?shù)減1
                down_flag=1;
if(temp==-1)
temp=0x59;      //小于0秒,返回59秒
break;
case 3:
                temp=Read1302(DS1302_HOUR);  //讀取小時(shí)數(shù)
temp=temp-1;  //小時(shí)數(shù)減1
                down_flag=1;
if(temp==-1)
temp=0x23;
break;
case 4:
                temp=Read1302(DS1302_WEEK);  //讀取星期數(shù)
temp=temp-1;  //星期數(shù)減1
                down_flag=1;
if(temp==0)
temp=0x7;;
break;
case 5:
                temp=Read1302(DS1302_DAY);  //讀取日數(shù)
temp=temp-1;  //日數(shù)減1
                down_flag=1;
if(temp==0)
temp=31;
break;
case 6:
                temp=Read1302(DS1302_MONTH);  //讀取月數(shù)
temp=temp-1;  //月數(shù)減1
                down_flag=1;
if(temp==0)
temp=12;
break;
case 7:
                temp=Read1302(DS1302_YEAR);  //讀取年數(shù)
temp=temp-1;  //年數(shù)減1
                down_flag=1;
if(temp==-1)
temp=0x85;
break;
default:
break;
}
while(Down==0);
}
}
void Setkey()//模式選擇按鍵
{
Set=1;
if(Set==0)
{
mdelay(8);
count=count+1; //Setkey按一次,count就加1
done=1; //進(jìn)入調(diào)整模式
        while(Set==0);   
}
}
void keydone()//按鍵功能執(zhí)行
{       
uchar Second;
if(flag==0)    //關(guān)閉時(shí)鐘,停止計(jì)時(shí)
    {
Write1302(0x8e,0x00); //寫入允許
        temp=Read1302(0x80);
        Write1302(0x80,temp|0x80);
   Write1302(0x8e,0x80); //禁止寫入
        flag=1;
}
    Setkey();            //掃描模式切換按鍵
switch(count)
{
case 1:
do        //count=1,調(diào)整秒
{
outkey();   //掃描跳出按鈕
Upkey();                //掃描加按鈕
Downkey();              //掃描減按鈕
if(up_flag==1||down_flag==1)  //數(shù)據(jù)更新,重新寫入新的數(shù)據(jù)
{
Write1302(0x8e,0x00); //寫入允許
   Write1302(0x80,temp|0x80); //寫入新的秒數(shù)
  Write1302(0x8e,0x80); //禁止寫入
   up_flag=0;
   down_flag=0;
}
  hide_sec++;          //位閃計(jì)數(shù)
if(hide_sec>3)
hide_sec=0;
                show_time();         //液晶顯示數(shù)據(jù)
}while(count==2);
break; 
case 2:
  do        //count=2,調(diào)整分
   {
hide_sec=0;
outkey();
Upkey();
Downkey();
if(temp>0x60)
   temp=0;
if(up_flag==1||down_flag==1)
{
Write1302(0x8e,0x00); //寫入允許
   Write1302(0x82,temp); //寫入新的分?jǐn)?shù)
  Write1302(0x8e,0x80); //禁止寫入
  up_flag=0;
  down_flag=0;
}
hide_min++;
if(hide_min>3)
    hide_min=0;
                show_time();
}while(count==3);
break;
case 3:
  do        //count=3,調(diào)整小時(shí)
   {
hide_min=0;
outkey();
Upkey();
Downkey();
if(up_flag==1||down_flag==1)
{
Write1302(0x8e,0x00); //寫入允許
  Write1302(0x84,temp); //寫入新的小時(shí)數(shù)
  Write1302(0x8e,0x80); //禁止寫入
  up_flag=0;
  down_flag=0;
}
hide_hour++;
if(hide_hour>3)
    hide_hour=0;
                show_time();
}while(count==4);
break;
case 4:
  do        //count=4,調(diào)整星期
   {
hide_hour=0;
outkey();
Upkey();
Downkey();
if(up_flag==1||down_flag==1)
{
Write1302(0x8e,0x00); //寫入允許
  Write1302(0x8a,temp); //寫入新的星期數(shù)
  Write1302(0x8e,0x80); //禁止寫入
  up_flag=0;
  down_flag=0;
}
hide_week++;
if(hide_week>3)
   hide_week=0;
                show_time();
}while(count==5);
break;
case 5:
do        //count=5,調(diào)整日
   {
hide_week=0;
outkey();
Upkey();
Downkey();
if(up_flag==1||down_flag==1)
{
Write1302(0x8e,0x00); //寫入允許
Write1302(0x86,temp); //寫入新的日數(shù)
  Write1302(0x8e,0x80); //禁止寫入
  up_flag=0;
  down_flag=0;
}
hide_day++;
if(hide_day>3)
    hide_day=0;
                show_time();
}while(count==6);
break;
case 6:
do        //count=6,調(diào)整月
   {
hide_day=0;
outkey();
Upkey();
Downkey();
if(up_flag==1||down_flag==1)
{
Write1302(0x8e,0x00); //寫入允許
  Write1302(0x88,temp); //寫入新的月數(shù)
  Write1302(0x8e,0x80); //禁止寫入
  up_flag=0;
  down_flag=0;
}
hide_month++;
if(hide_month>3)
    hide_month=0;
                show_time();
}while(count==7);
break;
case 7:
do        //count=7,調(diào)整年
   {
hide_month=0;
outkey();
Upkey();
Downkey();
if(up_flag==1||down_flag==1)
{
Write1302(0x8e,0x00); //寫入允許
  Write1302(0x8c,temp); //寫入新的年數(shù)
  Write1302(0x8e,0x80); //禁止寫入
  up_flag=0;
   down_flag=0;
}
hide_year++;
if(hide_year>3)
  hide_year=0;
                show_time();
}while(count==8);
break;
case 8:
count=0;hide_year=0;  //count8, 跳出調(diào)整模式,返回默認(rèn)顯示狀態(tài)
       Second=Read1302(DS1302_SECOND);
            Write1302(0x8e,0x00); //寫入允許
       Write1302(0x80,Second&0x7f);
       Write1302(0x8E,0x80);          //禁止寫入
done=0;
  break; //count=7,開啟中斷,標(biāo)志位置0并退出
default:
break;
}
}
void show_time()   //液晶顯示程序
{
DS1302_GetTime(&CurrentTime);  //獲取時(shí)鐘芯片的時(shí)間數(shù)據(jù)
  TimeToStr(&CurrentTime);       //時(shí)間數(shù)據(jù)轉(zhuǎn)換液晶字符
  DateToStr(&CurrentTime);       //日期數(shù)據(jù)轉(zhuǎn)換液晶字符
  GotoXY(0,1);
  Print(CurrentTime.TimeString); //顯示時(shí)間
  GotoXY(0,0);
  Print(CurrentTime.DateString); //顯示日期
  GotoXY(15,0);
  Print(week_value);             //顯示星期
  GotoXY(11,0);
  Print("Week"); //在液晶上顯示 字母 week
  Delay1ms(400);        //掃描延時(shí)        
}
//主函數(shù)********************************************************
void  main()
{
flag=1;           //時(shí)鐘停止標(biāo)志
LCD_Initial();    //液晶初始化
Initial_DS1302(); //時(shí)鐘芯片初始化
up_flag=0;
down_flag=0;
done=0;           //進(jìn)入默認(rèn)液晶顯示
while(1)
{  
while(done==1)
keydone();    //進(jìn)入調(diào)整模式
while(done==0)
     { 
    show_time();                //液晶顯示數(shù)據(jù)
            flag=0;                 
Setkey(); //掃描各功能鍵
  }
}
}

四:制作過程的問題:
1.做成作品的成品遇到主要的焊接的問題:電子萬年歷的電路系統(tǒng)較大,對(duì)于焊接方面更是不可輕視,龐大的電路系統(tǒng)中只要出于一處的錯(cuò)誤,則會(huì)對(duì)檢測造成很大的不便,而且電路的交線較多,對(duì)于各種鋒利的引腳要注意處理,否則會(huì)刺被帶有包皮的導(dǎo)線,則會(huì)對(duì)電路造成短路現(xiàn)象。
  解決的方法就是:焊接的時(shí)候非常細(xì)心,不可馬虎,一塊一塊按照步驟來,盡量避免線路相交。

2.對(duì)萬年歷修改時(shí)間或日期時(shí),有時(shí)LCD液晶顯示屏被屏蔽掉,造成不亮現(xiàn)象。
  解決的方法就是:根據(jù)測試,發(fā)現(xiàn)是電路的驅(qū)動(dòng)能力不足,最后在DS1302時(shí)鐘芯片的CS、SCLK、RET端接入電阻后,電路的驅(qū)動(dòng)能力才能滿足,即可解決不亮現(xiàn)象。

3.電子萬年歷是多功能的數(shù)字型,可以看當(dāng)前日期,時(shí)間。電子萬年歷功能很多,所以對(duì)于它的程序也較為復(fù)雜,所以在編寫程序和調(diào)試時(shí)出現(xiàn)了相對(duì)較多的錯(cuò)誤和問題。
  解決的方法就是:最后經(jīng)過多次的模塊子程序的修改,一步一步的完成,最終解決了軟件。

4.還有一個(gè)比較嚴(yán)重的問題就是發(fā)現(xiàn)燒入程序后,LCD液晶顯示屏顯示亮度不好。
  解決的方法就是:不斷調(diào)整電阻的阻值,一遍觀看LCD顯示屏,直到看到合適的亮度為止。

五:制作體會(huì):
制作這個(gè)多功能電子鐘一切都是從零開始,從最簡單的畫流程圖起步,到最后在中期評(píng)審前出來一個(gè)簡易版電子鐘??朔撕芏嗬щy,也品嘗到了單片機(jī)學(xué)習(xí)的酸甜苦辣。
在整個(gè)制作過程中,我們組四個(gè)人學(xué)到了許多之前沒學(xué)到的知識(shí)。也鍛煉了我們四個(gè)動(dòng)手操作能力。在程序編寫過程中,由于思路不清晰,開始時(shí)遇到了很多的問題,但經(jīng)過認(rèn)真思考和參照書本,實(shí)在不懂的就尋求幫助和上網(wǎng)找答案。
艱苦的學(xué)習(xí)讓我們明白了一個(gè)道理,知識(shí)i很是重要,但是只有實(shí)踐了才知道知識(shí)的獨(dú)特的魅力。
我們四個(gè)人合理分工也是我們的效率如此高的原因之一,會(huì)軟件的主要去負(fù)責(zé)編程方面的突破,會(huì)硬件好一點(diǎn)的盡量多熟悉硬件,最后實(shí)現(xiàn)了我們的小組中期目標(biāo),也建立我們之間的深厚的友誼。

六:附錄:
1.簡易版多功能電子鐘的系統(tǒng)電路圖:

2.簡易版多功能電子鐘的Proteus ISIS的工作界面:

3.簡易版多功能電子鐘的實(shí)物照片:

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動(dòng)力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉