論文格式
                電氣工程 會計論文 金融論文 國際貿易 財務管理 人力資源 輕化工程 德語論文 工程管理 文化產業管理 信息計算科學 電氣自動化 歷史論文
                機械設計 電子通信 英語論文 物流論文 電子商務 法律論文 工商管理 旅游管理 市場營銷 電視制片管理 材料科學工程 漢語言文學 免費獲取
                制藥工程 生物工程 包裝工程 模具設計 測控專業 工業工程 教育管理 行政管理 應用物理 電子信息工程 服裝設計工程 教育技術學 論文降重
                通信工程 電子機電 印刷工程 土木工程 交通工程 食品科學 藝術設計 新聞專業 信息管理 給水排水工程 化學工程工藝 推廣賺積分 付款方式
                • 首頁 |
                • 畢業論文 |
                • 論文格式 |
                • 個人簡歷 |
                • 工作總結 |
                • 入黨申請書 |
                • 求職信 |
                • 入團申請書 |
                • 工作計劃 |
                • 免費論文 |
                • 現成論文 |
                • 論文同學網 |
                搜索 高級搜索

                當前位置:論文格式網 -> 免費論文 -> 其他論文

                實時數字電子時鐘設計及畢業設計總結(二)

                本論文在其他論文欄目,由論文格式網整理,轉載請注明來源www.donglienglish.cn,更多論文,請點論文格式范文查看
                 2. Micrel Inc. QwikRadio TM Low Power UHF Receiver[A] .2001,8
                 3. 薛曉書. 單片微機原理及接口技術[M].西安石油大學 2002,3
                 4. 黃智偉,朱衛華. 單片機與嵌入式系統應用[M].南華大學.2005,3
                 5. 付浩.AT89C2051單片機高速串行輸出口設計[A].淮陰師范學院 2004,10
                 6. 周志德 單片機原理及應用 高等教育出版社 2001,6
                 7. 徐淑華 單片微型機原理及應用 哈爾濱工業大學出版社 1990
                 8. 吳微,文軍. 單片機原理及制作 武漢大學出版社 1991
                 9. 薛鈞義,張彥斌. MCS-51、96系列單片微型計算機及其應用 西安交通大學出版社 1990
                 10.何立民. MCS-51系列單片機應用系統設計系統配置與接口技術 北京航空航天大學出版社 1990
                 附錄一 系統硬件電路圖
                附錄二:程序清單
                    void main(void)
                {
                 sys_init();     /* 系統初始化 */
                 t0_init();     /* 定時器初始化 */
                 t1_init();
                 uart_init();    /* 串口初始化 */
                 buf[0]=0x0a;    /* "P."的段碼送顯示緩沖區 */
                 buf[1]=0x0b;
                 buf[2]=0x0b;
                 buf[3]=0x0b;
                 display();     /* 顯示待機符P. */
                 settime();     /* 等待設置當前時間 */
                 display();     /* 帶閃爍后要加顯,否則會出現尾位不顯的現象 */
                 TR0=1;      /* 設置完后開始走時,啟動定時器T0 */
                 ET0=1;      /* 允許T0溢出中斷 */
                 while(1)
                 {
                  if(fresh)    /* 判是否要刷新顯示(分或時變化) */
                  {
                   buf[0]=hourh;  /* 是,則新的時間送顯示緩沖區 */
                   buf[1]=hourl;
                   buf[2]=minuh;
                   buf[3]=minul;
                   display();   /* 顯示刷新 */
                   if(sec)    /* 判秒指示要刷新否 */
                   {
                    sec=0;   /* 是,則刷新(閃爍) */
                    L1=!L1;
                    L2=!L2;
                    delay20ms(); /* 點亮時間不能太長,否則影響秒指示,短則太暗 */
                   }
                  }
                  else
                  {
                   if(sec)
                   {
                    sec=0;
                    L1=!L1;
                    L2=!L2;
                    delay20ms();
                   }
                  }
                 }
                 }
                void display(void)
                {
                 uchar out; 
                 DISPCON=1;    /* 關閉顯示,防止傳送數據期間閃爍 */
                 out=seg[buf[0]];  /* 取出高位時段碼 */
                 SBUF=out;    /* 送入74LS164 */
                 while(!TI);    /* 等待發送完成 */
                 TI=0;
                 out=seg[buf[1]];  /* 取出低位時段碼 */
                 out&=0xfe;    /* 顯示時分分隔符:(這里用.代替)*/
                 SBUF=out;
                 while(!TI);
                 TI=0;
                 out=seg[buf[2]];  /* 分*/
                 SBUF=out;
                 while(!TI);
                 TI=0;
                 out=seg[buf[3]];
                 SBUF=out;
                 while(!TI);
                 TI=0;
                 DISPCON=0;    /* 所有數據已送入后開顯示*/
                 }
                 buf[0]=hourh;     /* 將目前設定的參數送顯示緩沖區 */
                 buf[1]=hourl;
                 buf[2]=minuh;
                 buf[3]=minul;
                 if(ss)        /* 這部分程序實現了當前位閃爍 */
                  {
                  switch(setflag)    /* 判當前設定位 */
                  {
                   case 0x01:  buf[0]=0x0b;/* 全暗代碼 */
                      break;
                   case 0x02:  buf[1]=0x0b;
                      break;
                   case 0x04:  buf[2]=0x0b;
                      break;
                   case 0x08:  buf[3]=0x0b;
                       break;

                  }
                 }
                 display();

                 void timer1(void) interrupt 3 using 1
                {
                 TH1=0x3c;    /* 100ms定時常數 */
                 TL1=0xb0;
                 count++;    /* 中斷次數加1*/
                 if(count!=5)   /* 判到10次(1s)否,不到直接返回 */
                  return;
                 ss=!ss;     /* ss閃爍標志求反 */
                 count=0;
                 }
                void settime(void)
                {
                 uchar i;
                 while(S1);    /* 等待S1鍵開始設置 */
                 for(i=0;i<4;i++)
                  delay20ms();  /* 延時去抖動 */
                 while(S1);
                 setflag=0;
                 ss=0;
                 hh=1;     /* 設置當前位標志 */

                 TR1=1;     /* 啟動定時器T1 */
                 ET1=1;     /* 允許T1溢出中斷 */
                 
                 void settime(void)
                {
                 uchar i;
                 while(S1);    /* 等待S1鍵開始設置 */
                 for(i=0;i<4;i++)
                  delay20ms();  /* 延時去抖動 */
                 while(S1);
                 setflag=0;
                 ss=0;
                 hh=1;     /* 設置當前位標志 */

                 TR1=1;     /* 啟動定時器T1 */
                 ET1=1;     /* 允許T1溢出中斷 */
                       break;
                    case 0x04:  buf[2]=0x0b;
                       break;
                    case 0x08:  buf[3]=0x0b;
                       break;
                   }
                 }
                  /****************************************************/
                  display();
                  if(S1) goto sett_1;
                  for(i=0;i<4;i++)
                   delay20ms(); /* 延時去抖動 */
                  if(S1) goto sett_1;
                  if(ml)
                  { 
                   TR1=0;     /* 關閉定時器T1 */
                    ET1=0;     /* 禁止T1溢出中斷 */
                 buf[0]=hourh;
                   buf[1]=hourl;
                   buf[2]=minuh;
                   buf[3]=minul;
                   return;  /* 如果當前編輯的份低位,則按S1鍵結束設定 */
                  }
                  setflag<<=1;  /* 當前位右移(標志左移1位) */
                  continue;
                  sett_1: if(S2) continue;
                    for(i=0;i<4;i++)
                      delay20ms(); /* 延時去抖動 */

                    if(S2) continue;
                    if(!hh) goto sett_2;
                    { hourh++;  /* 時高位加1處理 */
                     if(hourh!=2) continue;
                     hourh=0;  /* 時高位只能是0,1 */
                     continue;
                    }
                  sett_2: if(!hl) goto sett_3;
                    {
                      hourl++;/* 時低位加1處理,高位為0,可以是0~9,否則,只能0~2 */

                     if(hourh) goto sett_20;
                     if(hourl==10) goto sett_21;
                     continue;
                     sett_21: hourl=0;
                        continue;
                     sett_20: if(hourl==3) goto sett_22;
                        continue;
                     sett_22: hourl=0;
                        continue;
                     }

                  sett_3: if(!mh) goto sett_4;
                    { minuh++;  /* 分高位加1處理,只能是0~5 */
                     if(minuh==6) goto sett_30;
                     continue;
                     sett_30: minuh=0;
                        continue;
                    }
                  sett_4: minul++;   /* 分低位加1處理,只能是0~9 */
                    if(minul==10) goto sett_40;
                    continue;
                    sett_40: minul=0;
                        continue;

                  }

                 } 
                #include  "REG51.H"
                #define  uchar unsigned char
                #define  PSEG 0x30 /* P.的段碼 */

                /* 0~9和P,暗的的段碼(共陽數碼管) */
                uchar code seg[]={0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09,0x30,0xff};
                /*****************************************************************
                ;74LS164的3 4 5 6 10 11 12 13 對應數碼管的A,B,C,D,E,F,G,DP
                DB  0C0h,0F9H,0A4H,0B0H,99H 
                ; DB  92H,82H,0F8H,80H,90H
                *****************************************************************/

                /* 輸入輸出定義 */
                sbit  DISPCON =P3^2;  /* 顯示控制 */
                sbit  S1  =P1^3;  /* 設置鍵 */
                 sbit  S2  =P1^2;  /* 數字+1鍵 */
                 
                sbit  L1  =P1^7;  /* L1,L2構成秒指示":" */
                sbit  L2  =P1^6; 

                /* 全局變量定義 */
                uchar buf[4];    /* 顯示緩沖區 */
                uchar hourh;    /* BCD時鐘各位 */
                 uchar hourl;

                uchar minuh;
                uchar minul;
                uchar   second;    /* 秒變量 */

                uchar count;    /* 溢出中斷計數器 */
                uchar bdata setflag;  /* 設置用標志字節 */
                uchar bdata uflag;    /* 通用標志字節 */  

                /* 位變量定義 */ 
                 /* 以下4個位變量在setflag中,便于移位處理 */

                sbit hh =setflag^0;  /* 當前設置位標志 */
                sbit hl =setflag^1;
                sbit mh =setflag^2;
                sbit ml =setflag^3;

                /* 以下位變量在uflag */
                sbit fresh =uflag^0; /* 顯示刷新標志 */
                sbit ss  =uflag^1; /* 位閃爍標志 */
                sbit sec  =uflag^2; /* 秒指示標志 */
                 sbit warning =uflag^3; /* 定時標志 */


                /*-----------------------------------------------------------------*/
                sbit tfix =uflag^4; /* 開始修正標志 */
                #define  N 60   /* 誤差值,單位:1/10秒,默認為0,即不修正 */
                /*-----------------------------------------------------------------*/

                /* 函數說明 */
                void sys_init(void);
                void t0_init(void);
                void uart_init(void);
                void display(void);
                void delay20ms(void) ;
                void settime(void);

                void t1_init(void);

                /*****************************************************************
                ;時鐘主函數:main()
                ;定時器T0工作于中斷方式
                ;一旦走時開始,無法進行設置。如要重新設置,則必須復位
                ;24小時制
                ;如果某74LS164的1,2腳與其他74LS164的1,2腳錯連了,則會出現同顯示的狀態
                ;
                ;帶編輯設定位閃爍功能和走時誤差自動糾正功能.與此相關的函數是:
                ;  settime(),位閃爍標志ss
                ;  timer1(),在settime()中啟動,每1s將標志ss求反,達到閃爍目的
                ;*******************************************************************
                ;******************************************************************/
                void main(void)
                {
                 sys_init();     
                 t0_init();     
                 t1_init();
                 uart_init();    
                 buf[0]=0x0a;    
                 buf[1]=0x0b;
                 buf[2]=0x0b;
                 buf[3]=0x0b;
                 display();     
                 settime();     
                 display();     
                 TR0=1;      
                 ET0=1;      
                 while(1)
                 {
                  if(fresh)    
                  {
                   buf[0]=hourh;  
                   buf[1]=hourl;
                   buf[2]=minuh;
                   buf[3]=minul;
                   display();   
                   if(sec)     
                   {
                    sec=0;   
                    L1=!L1;
                    L2=!L2;
                    delay20ms(); 
                   }
                  }
                  else
                  {
                   if(sec)
                   {
                    sec=0;
                    L1=!L1;
                    L2=!L2;
                    delay20ms();
                   }
                  }
                 }
                }
                /*****************************************************************
                ;****************************************************************/
                void display(void)
                {
                 uchar out; 
                 DISPCON=1;    
                 out=seg[buf[0]];  
                 SBUF=out;    
                 while(!TI);    
                 TI=0;

                首頁 上一頁 1 2 3 下一頁 尾頁 2/3/3


                相關論文
                上一篇:農村義務教育應對稅費改革的策略 下一篇:上崗實踐周記及小結
                Tags:實時 數字 電子 時鐘 設計 畢業設計 總結 【收藏】 【返回頂部】
                人力資源論文
                金融論文
                會計論文
                財務論文
                法律論文
                物流論文
                工商管理論文
                其他論文
                保險學免費論文
                財政學免費論文
                工程管理免費論文
                經濟學免費論文
                市場營銷免費論文
                投資學免費論文
                信息管理免費論文
                行政管理免費論文
                財務會計論文格式
                數學教育論文格式
                數學與應用數學論文
                物流論文格式范文
                財務管理論文格式
                營銷論文格式范文
                人力資源論文格式
                電子商務畢業論文
                法律專業畢業論文
                工商管理畢業論文
                漢語言文學論文
                計算機畢業論文
                教育管理畢業論文
                現代教育技術論文
                小學教育畢業論文
                心理學畢業論文
                學前教育畢業論文
                中文系文學論文
                最新文章
                熱門文章
                計算機論文
                推薦文章

                本站部分文章來自網絡,如發現侵犯了您的權益,請聯系指出,本站及時確認刪除 E-mail:349991040@qq.com

                論文格式網(www.donglienglish.cn--論文格式網拼音首字母組合)提供其他論文畢業論文格式,論文格式范文,畢業論文范文

                Copyright@ 2010-2018 LWGSW.com 論文格式網 版權所有

                感谢您访问我们的网站,您可能还对以下资源感兴趣:

                论文格式网:毕业论文格式范文