第一篇:嵌入式電子鬧鐘時鐘課程設計
#include
sbit rs=P2^5;//液晶位定義 sbit lcden=P2^7;sbit s1=P2^0;//時間功能切換按鍵 sbit s2=P2^1;//按鍵加 sbit s3=P2^3;//按鍵減
sbit s4=P2^4;//鬧鐘功能切換鍵 sbit rst=P1^5;//ds1302引腳定義 sbit io=P1^6;sbit sclk=P1^7;sbit beep=P3^0;//蜂鳴器
uchar num,count,shi,fen,miao,s1num,s2num, year,month,day,week,flag,flag1,year1,month1, day1,week1,shi1,fen1,miao1,year2,month2, day2,week2,shi2,fen2,miao2,year5,month5, day5,week5,shi5,fen5,miao5,wk,ashi,afen;//參數定義
uchar code table[]=“20--”;//液晶固定顯示 uchar code table1[]=“ : : 00:00”;/* uchar time_dat[7]={12,1,6,6,12,59,59};//年周月日時分秒 uchar write_add[7]={0x8c,0x8a,0x88,0x86,0x84,0x82,0x80};uchar read_add[7]={0x8d,0x8b,0x89,0x87,0x85,0x83,0x81};*/ void write_com(uchar com);//液晶寫指令函數 void write_data(uchar date);//液晶寫數據函數
void write_ds1302(uchar add,uchar dat);//ds1302芯片寫指令函數 void set_rtc();//ds1302時間設置函數 void time_pros();//ds1302進制轉換函數 void read_rtc();//ds1302讀時間函數 void alarm();//鬧鐘函數
void delay(uint z)//延時函數 { uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);} void init()//初始化 { lcden=0;flag=0;flag1=0;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);//液晶固定顯示,第一行 for(num=0;num<14;num++){ write_data(table[num]);delay(5);}
write_com(0x80+0x40);//液晶顯示第二行 for(num=0;num<20;num++){ write_data(table1[num]);delay(5);} }
void write_com(uchar com)//1602液晶寫指令 { rs=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;}
void write_data(uchar date)//1602液晶寫寫數據 { rs=1;P0=date;delay(5);lcden=1;delay(5);lcden=0;}
void write_sfm(uchar add,uchar date)//時分秒 { uchar shi3,ge;shi3=date/10;ge=date%10;write_com(0x80+0x40+add);write_data(0x30+shi3);write_data(0x30+ge);}
void write_nyr(uchar ad,uchar date)//年月日 { uchar shi4,ge2;shi4=date/10;ge2=date%10;write_com(0x80+ad);write_data(0x30+shi4);write_data(0x30+ge2);}
void write_week(uchar wk)//星期按西方星期設置{ write_com(0x80+11);switch(wk){ case 1: write_data('S');delay(5);write_data('U');delay(5);write_data('N');break;
case 2: write_data('M');delay(5);write_data('O');delay(5);write_data('N');break;
case 3: write_data('T');
星期天為第一天 delay(5);write_data('U');delay(5);write_data('E');break;
case 4: write_data('W');delay(5);write_data('E');delay(5);write_data('D');break;
case 5: write_data('T');delay(5);write_data('H');delay(5);write_data('U');break;
case 6: write_data('F');delay(5);write_data('R');delay(5);write_data('T');break;
case 7: write_data('S');delay(5);write_data('A');delay(5);write_data('T');break;
} }
void keyscan()//{ if(s1==0){ delay(5);
按鍵函數 if(s1==0){ write_com(0x0f);s1num++;//記錄按鍵次數 flag=1;flag1=1;while(!s1);
switch(s1num)//光標閃爍點定位 { case 1:write_com(0x80+0x40+6);//秒 break;
case 2:write_com(0x80+0x40+3);//分 break;
case 3:write_com(0x80+0x40+0);//時 break;
case 4:write_com(0x80+11);//星期 break;case 5:write_com(0x80+8);//日 break;
case 6:write_com(0x80+5);//月 break;
case 7:write_com(0x80+2);//年 break;
case 8:s1num=0;write_com(0x0c);//設置開顯示光標不顯示 關閉時間設置
set_rtc();flag=0;break;}
} }
if(s1num!=0)//按鍵加減 { if(s2==0)//加按鍵函數 { delay(10);if(s2==0){
while(!s2);switch(s1num)//根據功能鍵相應次數做出調節 { case 1: miao++;//秒加 if(miao==60)miao=0;write_sfm(6,miao);write_com(0x80+0x40+6);break;
case 2: fen++;// if(fen==60)fen=0;write_sfm(3,fen);write_com(0x80+0x40+3);break;
case 3: shi++;// if(shi==24)shi=0;write_sfm(0,shi);write_com(0x80+0x40+0);break;
case 4: week++;// if(week==8)week=1;write_week(week);write_com(0x80+11);break;
case 5: day++;// if(day==32)day=1;write_nyr(8,day);write_com(0x80+8);break;
case 6: month++;//分加 時加 星期加日加 月加
if(month==13)month=1;write_nyr(5,month);write_com(0x80+5);break;
case 7: year++;//年加 if(year==100)year=0;write_nyr(2,year);write_com(0x80+2);break;
}
}
}
if(s3==0)//減按鍵函數同上 { delay(10);if(s3==0){ while(!s3);switch(s1num)//根據功能鍵相應次數做出調節 { case 1: miao--;if(miao==-1)miao=59;write_sfm(6,miao);write_com(0x80+0x40+6);break;
case 2: fen--;if(fen==-1)fen=59;write_sfm(3,fen);write_com(0x80+0x40+3);break;
case 3: shi--;if(shi==-1)shi=23;write_sfm(0,shi);write_com(0x80+0x40+0);break;
case 4: week--;if(week==-1)week=7;write_week(week);write_com(0x80+11);break;
case 5: day--;if(day==-1)day=31;write_nyr(8,day);write_com(0x80+8);break;
case 6: month--;if(month==-1)month=12;write_nyr(5,month);write_com(0x80+5);break;
case 7: year--;if(year==-1)year=99;write_nyr(2,year);write_com(0x80+2);break;
}
} }
}
if(s4==0)// { delay(5);
鬧鐘按鍵 if(s4==0){ write_com(0x0f);//光標閃爍 s2num++;//記錄按鍵次數 flag=1;while(!s4);switch(s2num)//光標閃爍點定位 { case 1:write_com(0x80+0x40+13);//分 break;
case 2:write_com(0x80+0x40+10);//時 break;
case 3:write_com(0x0c);//關閉鬧鐘設置 flag=0;s2num=0;break;
}
} }
if(s2num!=0)//鬧鐘設置 { if(s2==0)//鬧鐘加 { delay(10);if(s2==0){ while(!s2);switch(s2num)//根據功能鍵相應次數做出調節 { case 1: afen++;if(afen==60)afen=0;write_sfm(13,afen);write_com(0x80+0x40+13);break;
case 2: ashi++;if(ashi==24)ashi=0;write_sfm(10,ashi);write_com(0x80+0x40+10);break;
} } }
if(s3==0)//鬧鐘減 { delay(10);if(s3==0){ while(!s3);switch(s2num)//根據功能鍵相應次數做出調節 { case 1: afen--;if(afen==-1)afen=59;write_sfm(13,afen);write_com(0x80+0x40+13);break;
case 2: ashi--;if(ashi==-1)ashi=23;write_sfm(10,ashi);write_com(0x80+0x40+10);break;
} } }
} }
void wirte_ds1302_byte(uchar dat)//ds1302字節寫 { uchar i;for(i=0;i<8;i++){ sclk=0;io=dat&0x01;dat=dat>>1;sclk=1;} }
void write_ds1302(uchar add,uchar dat)//ds1302寫函數 { rst=0;_nop_();// 空操作 sclk=0;_nop_();rst=1;_nop_();wirte_ds1302_byte(add);wirte_ds1302_byte(dat);rst=0;io=1;sclk=1;}
uchar read_ds1302(uchar add)//ds1302{ uchar i,value;rst=0;_nop_();// 空操作 sclk=0;_nop_();rst=1;_nop_();wirte_ds1302_byte(add);for(i=0;i<8;i++){ value=value>>1;sclk=0;if(io){ value=value|0x80;} sclk=1;} rst=0;_nop_();// 空操作 sclk=0;_nop_();
讀函數 sclk=1;io=1;return value;}
void set_rtc()//ds1302時間設置 { write_ds1302(0x8e,0x00);//關寫保護
year1=year/10;//轉換為十六進制 year=year%10;year=year+year1*16;write_ds1302(0x8c,year);
week1=week/10;week=week%10;week=week+week1*16;write_ds1302(0x8a,week);
month1=month/10;month=month%10;month=month+month1*16;write_ds1302(0x88,month);
day1=day/10;day=day%10;day=day+day1*16;write_ds1302(0x86,day);
shi1=shi/10;shi=shi%10;shi=shi+shi1*16;write_ds1302(0x84,shi);
fen1=fen/10;fen=fen%10;fen=fen+fen1*16;write_ds1302(0x82,fen);
miao1=miao/10;miao=miao%10;miao=miao+miao1*16;write_ds1302(0x80,miao);
write_ds1302(0x8e,0x80);//開寫保護 flag1=0;}
void read_rtc()//從ds1302中讀時間 { year2=read_ds1302(0x8d);week2=read_ds1302(0x8b);month2=read_ds1302(0x89);day2=read_ds1302(0x87);shi2=read_ds1302(0x85);fen2=read_ds1302(0x83);miao2=read_ds1302(0x81);}
void time_pros()//進制 {
year5=year2/16;year2=year2%16;year2=year2+year5*10;
month5=month2/16;month2=month2%16;month2=month2+month5*10;
day5=day2/16;day2=day2%16;day2=day2+day5*10;
shi5=shi2/16;shi2=shi2%16;shi2=shi2+shi5*10;
fen5=fen2/16;fen2=fen2%16;fen2=fen2+fen5*10;
miao5=miao2/16;miao2=miao2%16;miao2=miao2+miao5*10;
從ds1302中讀出的時間轉換為十
}
void display()//顯示函數 { write_sfm(6,miao2);write_com(0x80+0x40+6);
write_sfm(3,fen2);write_com(0x80+0x40+3);
write_sfm(0,shi2);write_com(0x80+0x40+0);
write_week(week2);write_com(0x80+11);
write_nyr(8,day2);write_com(0x80+8);
write_nyr(5,month2);write_com(0x80+5);
write_nyr(2,year2);write_com(0x80+2);
if((ashi==shi2)&&(afen==fen2)){ alarm();} }
void alarm()// 鬧鐘 { beep=0;delay(1000);beep=1;} void main()//主函數 { init();//初始化 while(1){ keyscan();//按鍵函數
if(flag==0){ keyscan();read_rtc();time_pros();display();}
} }
第二篇:EDA課程設計 數字時鐘(鬧鐘)
課 程 設 計 說 明 書
題目: 鬧鐘
學院(系): 年級專業: 學 號: 學生姓名: 指導教師: 教師職稱:
共 16 頁
第 1 頁
目 錄
第1章 摘要…………………………………………………………………………………1 第2章 設計方案……………………………………………………………………………
2.1 VHDL簡介…………………………………………………………………………… 2.2 設計思路…………………………………………………………………………… 第3章 模塊介紹…………………………………………………………………………… 第4章 Verilog HDL設計源程序………………………………………………………… 第5章 波形仿真圖………………………………………………………………………… 第6章 管腳鎖定及硬件連線……………………………………………………………… 心得體會 ……………………………………………………………………………………17 參考文獻 ……………………………………………………………………………………18
共 16 頁
第 2 頁
第一章 摘要
在當今社會,數字電路產品的應用在我們的實際生活中顯得越來越重要,與我們的生活聯系愈加緊密,例如計算機、儀表、電子鐘等等,使我們的生活工作較以前的方式更加方便、完善,帶來了很多的益處。
在此次EDA課程,我的設計課題是鬧鐘,使用VHDL語言進行編程完成。報告書主要由設計方案、模塊介紹、設計源程序、仿真波形圖和管腳鎖定及硬件連線四部分組成。設計方案主要介紹了我對于設計課題的大致設計思路,之后各個部分將會詳細介紹設計組成及程序。
共 16 頁
第 3 頁
第二章 設計方案 §2.1 VHDL簡介
數字電路主要是基于兩個信號(我們可以簡單的說是有電壓和無電壓),用數字信號完成對數字量進行算術運算和邏輯運算的電路我們稱之為數字電路,它具有邏輯運算和邏輯處理等功能,數字電路可分為組合邏輯電路和時序邏輯電路。
EDA技術,就是以大規模可編程邏輯器件為設計載體,以硬件描述語言為系統邏輯描述的主要表達方式,以計算機、大規模可編程邏輯器件的開發軟件及實驗開發系統為設計工具,通過有關的開發軟件,自動完成用軟件的方式設計的電子系統到硬件系統的邏輯編譯、邏輯化簡、邏輯分割、邏輯綜合及優化、邏輯布局布線、邏輯仿真,直至完成對于特定目標芯片的適配編譯、邏輯映射、編程下載等工作,最終形成集成電子系統或專用集成芯片的一門新技術。
利用EDA技術進行電子系統的設計,具有以下幾個特點:① 用軟件的方式設計硬件;② 用軟件方式設計的系統到硬件系統的轉換是由有關的開發軟件自動完成的;③ 設計過程中可用有關軟件進行各種仿真;④ 系統可現場編程,在線升級;⑤ 整個系統可集成在一個芯片上,體積小、功耗低、可靠性高。因此,EDA技術是現代電子設計的發展趨勢。
EDA技術伴隨著計算機、集成電路、電子系統設計的發展,經歷了計算機輔助設計(Computer Assist Design,簡稱CAD)、計算機輔助工程設計(Computer Assist Engineering Design,簡稱CAE)和電子設計自動化(Electronic Design Automation,簡稱EDA)三個發展階段。
常用的硬件描述語言有VHDL、Verilog、ABEL。
EDA技術是隨著集成電路和計算機技術的飛速發展應運而生的一種高級、快速、有效的電子設計自動化工具。它是為解決自動控制系統設計而提出的,從70年代經歷了計算機輔助設計(CAD),計算機輔助工程(CAE),電子系統設計自動化(ESDA)3個階段。前兩個階段的EDA產品都只是個別或部分的解決了電子產品設計中的工程問題;第三代EDA工具根據工程設計中的瓶
共 16 頁
第 4 頁
頸和矛盾對設計數據庫實現了統一管理,并提出了并行設計環境概念,提供了獨立于工藝和廠家的系統級的設計工具。EDA關鍵技術之一就是采用硬件描述語言對硬件電路進行描述,且具有系統級仿真和綜合能力。目前應用比較廣泛的硬件描述語言就是Verilog HDL。Verilog HDL簡介
Verilog HDL是目前大規模集成電路設計中最具代表性、使用最廣泛的硬件描述語言之一。具有如下特點:
(1)能夠在不同的抽象層次上,如系統級、行為級、RTL級、門級和開關級,對設計系統進行精確而簡練的描述。
(2)能夠在每個抽象層次的描述上對設計進行仿真驗證,及時發現及時發現可能存在的錯誤,縮短設計周期,并保存整個設計過程的正確性。
(3)由于代碼描述與工藝過程實現無關,便于設計標準化,提高設計的可重用性。如國有C語言的編程基礎經驗,只需很短的時間就能學會和掌握Verilog HDL,因此,Verilog HDL可以作為學習HDL設計方法的入門和基礎。
§2.2 設計思路
一、設計要求
1、設計簡易的一分鐘鬧鐘;
2、可手動輸入定時時間(0~59s),如30s;
3、兩個動態數碼管上跟蹤顯示時間的變化:如30,29,28……到了指定時間蜂鳴器發出5s的提示音;
4、采用2個動態數碼管顯示時間;
5、用蜂鳴器發出提示音;
6、撥碼開關設置定時時間。
二、設計思路
根據上述的設計要求,整個系統大致包括如下幾個組成部分:它包括以下幾個組成
共 16 頁
第 5 頁
部分:1)顯示屏,由2個七段動態數碼管組成,用于顯示當前設置的鬧鐘時間并進行跟蹤顯示;2)6個撥碼開關,用于輸入鬧鐘時間;3)復位鍵,確定新的鬧鐘時間設置,或顯示已設置的鬧鐘時間;4)蜂鳴器,在當前時鐘時間與鬧鐘時間相同時,發出報警聲。
共 16 頁
第 6 頁
第三章 模塊介紹
一、計時模塊
此模塊共有6個撥碼開關作為輸入信號,當開關無輸入時,都處于低電平狀態,D5、D4、D3、D2、D1和D0是并行數據輸入端,CRN是異步復位輸入端,LDN是預置控制輸入端。當開關有輸入時,會產生一個六位的二進制輸出信號num,此信號表示動作的開關序號,它是作為動態顯示模塊的輸入信號。
二、數碼顯示模塊
這個模塊有兩個輸入信號和兩個輸出信號。其中一個是信號輸入模塊的輸出num作為輸入,另外一個是時鐘輸入端,作為掃描數碼管的頻率信號,采用1024HZ的中高頻信號。輸出信號為SS0、SS1、SS2,是動態數碼管的片選段。
三、報警模塊
報警模塊共有兩個輸入信號ET和CLK1,一個輸出信號COUT。當從信號輸入模塊檢測到有開關輸入時,ET信號已置1,CLK上升沿到來時,程序將COUT置1,蜂鳴器發出時間為10s的報警信號,時間到達后,跳出循環,蜂鳴器停止報警。
四、頂層模塊
頂層模塊的作用是將各個模塊組合到一起,從而實現最終的功能。其輸入即為各個模塊的輸入,一個時鐘信號,還有6個撥碼開關的輸入,其輸出為數碼管顯示和報警器。
共 16 頁
第 7 頁
第四章Verilog HDL設計源程序
一、計時模塊
module counter(LDN,D5,D4,D3,D2,D1,D0,CLK,CRN,Q,OC);input LDN,D5,D4,D3,D2,D1,D0,CLK,CRN;output[5:0] Q;output OC;reg OC;reg[5:0] Q;reg[5:0] Q_TEMP;reg[3:0] NUM;always@(posedge CLK or negedge CRN)begin
if(~CRN)Q_TEMP=6'b000000;else if(~LDN)begin Q_TEMP={D5,D4,D3,D2,D1,D0};NUM=4'b0000;end else if(Q_TEMP<6'b111100&&Q_TEMP>6'b000000)begin if(NUM<4'b1000&&NUM>=4'b0000)NUM=NUM+1;else NUM=4'b0001;if(NUM==4'b1000)Q_TEMP=Q_TEMP-1;end
共 16 頁
第 8 頁
else Q_TEMP=6'b000000;end always begin
if(Q_TEMP==6'b000000&&LDN)OC=1'b1;else OC=1'b0;Q=Q_TEMP;end endmodule
二、數碼顯示模塊
module showtime(A,Q,CLKM,SS0,SS1,SS2);input[5:0] A;input CLKM;output[6:0] Q;output SS0,SS1,SS2;reg[6:0] Q;reg SS0,SS1,SS2;reg M;reg[5:0] B;reg[5:0] C;always@(posedge CLKM)begin M=M+1;end always begin
共 16 頁
第 9 頁
if(A<='b001001)begin B=A;C=0;end else if(A>'b001001&&A<='b10011)begin B=A-10;C=1;end else if(A>'b10011&&A<='b11101)begin B=A-20;C=2;end else if(A>'b11101&&A<='b100111)begin B=A-30;C=3;end else if(A>'b100111&&A<='b110001)begin B=A-40;C=4;end else if(A>'b110001&&A<='b111011)
共 16 頁
第 10 頁
begin B=A-50;C=5;end else if(A=='b111100)begin B=0;C=6;end if(M=='b1)begin SS0=1;SS1=0;SS2=0;case(B)'b000000:Q='b0111111;'b000001:Q='b0000110;'b000010:Q='b1011011;'b000011:Q='b1001111;'b000100:Q='b1100110;'b000101:Q='b1101101;'b000110:Q='b1111101;'b000111:Q='b0000111;'b001000:Q='b1111111;'b001001:Q='b1101111;default:Q='b0111111;endcase end
共 16 頁
第 11 頁
else if(M=='b0)begin SS0=0;SS1=0;SS2=0;case(C)'b000000:Q='b0111111;'b000001:Q='b0000110;'b000010:Q='b1011011;'b000011:Q='b1001111;'b000100:Q='b1100110;'b000101:Q='b1101101;'b000110:Q='b1111101;default:Q='b0111111;endcase end end endmodule
三、報警模塊
module speaker(CLK1,ET,COUT);input CLK1,ET;output COUT;reg COUT;reg[5:0] TEMP;always@(posedge CLK1)begin
if(~ET)TEMP=6'b000000;else if(TEMP<6'b101001&&TEMP>=6'b000000)TEMP=TEMP+1;
共 16 頁
第 12 頁
else TEMP=6'b101001;end always begin if(TEMP<6'b101001&&TEMP!=6'b000000)COUT=1'b1;else COUT=1'b0;end endmodule
四、頂層模塊 module timer(LDN,D5,D4,D3,D2,D1,D0,CLK,CRN,CLK1,COUT,LED,SS0,SS1,SS2,CLKM);input LDN,D5,D4,D3,D2,D1,D0,CLK,CRN,CLK1,CLKM;output[6:0] LED;output COUT,SS0,SS1,SS2;wire X6;wire[5:0] X;counter u1(.LDN(LDN),.D5(D5),.D4(D4),.D3(D3),.D2(D2),.D1(D1),.D0(D0),.CLK(CLK),.CRN(CRN),.Q(X[5:0]),.OC(X6));showtime u2(.A(X[5:0]),.Q(LED[6:0]),.CLKM(CLKM),.SS0(SS0),.SS1(SS1),.SS2(SS2));speaker u3(.CLK1(CLK1),.ET(X6),.COUT(COUT));endmodule
共 16 頁
第 13 頁
第五章 波形仿真圖
一、計時模塊波形仿真圖
二、報警模塊波形仿真圖
三、頂層模塊波形仿真圖
共 16 頁
第 14 頁
第六章 管腳鎖定及硬件連線
一、管腳鎖定
CLK>chip=timer;Input Pin=75 CLKM>chip=timer:Input Pin=83 CLK1> chip=timer;Input Pin=85 COUT> chip=timer;Output Pin=38 CRN> chip=timer;Input Pin=39 DO> chip=timer;Input Pin=53 D1> chip=timer;Input Pin=47 D2> chip=timer;Input Pin=46 D3> chip=timer;Input Pin=45 D4> chip=timer;Input Pin=44 D5> chip=timer;Input Pin=41 LDN> chip=timer;Input Pin=40 LED0> chip=timer;Output Pin=173 LED1> chip=timer;Output Pin=174 LED2> chip=timer;Output Pin=175 LED3> chip=timer;Output Pin=176 LED4> chip=timer;Output Pin=177 LED5> chip=timer;Output Pin=179 LED6> chip=timer;Output Pin=187 SSO> chip=timer;Output Pin=191 SS1> chip=timer;Output Pin=192 SS2> chip=timer;Output Pin=193 引線說明:撥碼開關使用數字開關組A,需外接引線。
共 16 頁
第 15 頁
心得體會
通過這次設計,初步對EDA有一個了解。
出于沒有學習過這門課程,所以再課程設計開始時對于EDA就是一無所知。課程設計之初是做了一個簡單的培訓,關于軟件和硬件的設計,算是入門訓練吧。通過前兩天的課程講解,我對其有了初步的了解。之后就開始按照指導書中的例題就行練習,仿真,有進一步的掌握后就開始了自己的課程設計。由于我C++程序設計知識不扎實,所以導致這次軟件設計困難重重,也讓我明白了在這個領域知識的串聯是非常普遍的,學好學扎實是我們必須要做到的要求。
通過這次課程設計使我懂得了理論與實際相結合是很重要的,只有把所學的理論知識與實踐相結合起來,從理論中得出結論,才能提高自己的實際動手能力。在設計的過程中,可以說得是困難重重,但這畢竟第一次做,同時在設計的過程中發現了自己的不足之處。
在此還需要感謝鄭兆兆老師和呂宏詩老師耐心的指導與幫助,使課設能夠更加順利的完成。
共 16 頁
第 16 頁
參考文獻
1、閻石主編.《數字電子技術基礎》(第五版).高等教等育出版社.2006.5,168-175頁 ;
2、李國麗、朱維勇、何劍春主編 《EDA與數字系統設計》(第2版).機械工業出版社.2009.3,105-146頁
共 16 頁
第 17 頁
第三篇:課程設計數字電子鬧鐘
數 字 鬧 鐘 的 設 計
數字鬧鐘的設計與制作
一、設計任務與要求
設計并制作一個帶有可定時起鬧的數字鐘
1.有“時”、“分”十進制顯示,“秒”使用發光二極管閃爍表示
2.以24小時為一個計時周期
3.走時過程中能按預設的定時時間(精確到小時)啟動鬧鐘,以發光二極管閃爍表示,啟鬧時間為3s~10s
二、實驗儀器及主要器件
5V電源
1臺 面包板
1塊 74LS163
6片 74LS00
5片 74LS138
2片 CD4511
4片 LM555
1片 74LS123
1片 LED共陰極顯示器
4片 電阻
若干 電容
3個 導線
15米
三、設計原理方案
系統構成
1、標準時間源
l)標準時間源即秒信號發生器)可采用LM555構成多諧振蕩器,調整電阻可改變頻率,使之產生1Hz的脈沖信號(即T=1S)
LM555管腳排列及電路
T=0.7(RA+2RB)C
T=1S,C=220uF
計算得RA+2RB≈6.5K
取RA=1.5K,RB=2.4K
2.計時部分:時計數單元一般為24進制計數器,其輸出為兩位8421BCD碼形式;分計數和秒計數單元為60進制計數器,其輸出也為8421BCD碼。
模60計數器采用異步方式
如秒計數器:分成個位和十位,個位模十,十位模六。個位從0000計數到1001,利用置數端將個位從0000重新開始計數,同時將1001信號作為一個CP脈沖信號傳給十位,讓十位開始從0000開始計數。以此規律開始計數,直到十位計數到5,個位計數到9時,通過十位的置數端將十位清零,重新開始計數,并將此信號作為一個CP脈沖信號傳給分計數器。
模24計數器電路
模24計數器采用同步方式, 使用兩片74LS163芯片,cp脈沖均由分計數器提供.第一片制成模10計數器,將1001信號提取出來后給與清零端。第二片芯片制成模為3的計數器,原數據ABCD給予0000信號.將第一片芯片的0011信號與第二片芯片的0010信號提取出來給與第一片芯片的置數端與第二片芯片的清零端,上升沿過來之后,兩片芯片同時清零
3、定時起鬧部分
l)正點起鬧,不要求分)使用2片74LS138,分別選出小時的十位和個位)小時十位為0~2,3-8譯碼器只使用前2個輸入端,小時個位為0~9,3-8譯碼器只有3個輸入端,會丟失幾個時間點:8點、9點、18點、19點。)還應控制起鬧時間的長短,用74LS123構成單穩態觸發器
起鬧部分框圖
控制起鬧時間長短:T=0.28RC(1+0.7k/R)采用2片74LS138,將控制十位的3-8譯碼器的A2端作為控制個位3-8譯碼器的最高位,這樣就可以滿足小時個位為0-9。控制十位的3-8譯碼器的A1,A0一起控制十位從0-2變化。
4、完整的鬧鐘電路圖(ewb設計圖)
電路安裝要求
1.布局合理
2.導線橫平豎直,且不要從集成塊上跳線
3.導線緊貼面包板,連接可靠
4.交叉線盡可能少
調試方法:
(1)采用逐級調試的方法
1.確保秒信號正常
2.調試秒計數器
3.調試分計數器,可將秒信號作為分計數器的CP脈沖
4.調試小時計數器,可將秒信號作為小時計數器的CP脈沖
5.調試鬧鐘電路
(2)將秒信號發生電路中的電容換成比較小的電容,這樣使得分信號的脈沖周期比較短
五、設計和調試過程中出現的問題及解決方法
1)將秒信號接入示波器,與標準信號對比,出現誤差,但在允許范圍之內。
2)插上電源后發現秒信號和分信號的信號紊亂,分信號和秒信號同步計數。于是我們對秒的模六十進行單脈沖及示波器的檢測,在檢查秒信號個位(模十計數器)時發現,14腳信號正確,而13,12,11腳信號紊亂。后進行接線檢查,發現有線是虛接,再修改后,13腳信號恢復正常,而12,11腳依舊紊亂。因查不出原因,而后對分信號進行檢查。由于分秒計數器所采用的模六十一致,而分信號正常,故排除模六十計數器設計有誤。將分信號的器件替換控制秒信號的器件,秒信號依舊有誤,故排出器件問題。最后進行檢測面包板狀況,出現了讓人崩潰的狀況,面包板上控制秒信號個位的163芯片2腳所在的一縱列5個孔全部與地相連。我們不得不改變布局,進行避讓。修改后,分秒模六十計數器正常。
3)剛接通電源時,小時計數器十位顯示7,后給予清零信號后顯示恢復正常。將秒脈沖接到小時計數器的個位CP端,在進位時發現23:00時不能同時清零。對模二十四的設計進行分析發現采用的清零端為異步,后經過改造改成同步清零,清零正常。
4)在檢測CD4511驅動電路的過程中發現數碼管不能正常顯示的狀況,經檢驗發現主要是由于接觸不良的問題,其中包括線的接觸不良和芯片的接觸不良,在實驗過程中,數碼管有幾段二極管時隱時現,有時會消失。用5V電源對數碼管進行檢測,一端接地,另一端接觸每一段二極管,發現二極管能正常顯示的,在檢測過程中發現有幾根線有時能接通,有時不能接通,把接觸不好的線重新接過后發現能正常顯示了。其次是由于芯片接觸不良的問題,當檢查到線路完全正確,并且確保導線沒有問題時,我們推測器件有問題,其解決方法為把CD4511的芯片拔出,根據面包板孔的的狀況重新調整其引腳,使其正對于孔,再用力均勻地將芯片插入面包板中,此后發現能正常顯示。
5)在檢查分信號到小時信號的進位是否正常時發現有時顯示正常,有時顯示不穩定。一時找不到問題,經過討論發現CP脈沖重疊造成顯示不穩定。
6)在制作起鬧部分電路的過程中,發現鬧鐘能完成基本功能,但無法在8,9,18,19點起鬧。通過分析和設計,我們采用卡諾圖化簡將輸入信號接到功能腳的方法,到達在特殊時間起鬧的目的。
至此,數字鬧鐘的調試全部結束并達到要求。
六、心得體會
本次數字鐘設計要求我們將理論付諸實踐,在實踐中進一步鞏固理論知識,最終當我們看到自己設計好的數字鬧鐘時,我們激動萬分。
首先,我們從沒有將以前學的各種知識整合到一起,所以這種有點綜合性的課設就要求我們在熟悉每個工作部分的同時,能把他們有機的結合起來。
第二,在模六十和模二十四的計數器的設計中,要求我們對各個芯片的各引腳的功能很熟悉。在這個過程中,我們進一步的熟悉的每個器件的用途和功能,尤其是4511和74LS123,這兩種芯片之前我們都沒有接觸過。
第三,我們在設計的過程中使用了EWB軟件,由于電路復雜,交叉線較多,所以就要求我們在連接過程中細心的完成接線,并巧妙的布局使得面包板上的線不交叉。
第四,當我們連接好線路以后,在調試的過程中我們借助于示波器,借助于低頻信號發生器的單脈沖,一步步的排查錯誤,在此過程中更深一步的熟悉的了解了示波器和低頻信號發生器的使用方法。
第五,在整個課設中要求我們有良好的心理狀態,尤其是面對連線復雜的面包板。我們必須冷靜分析問題,解決問題。
第六,本次課設是一個團體的活動,我們在這次課設中體會了團隊精神。
最后,感謝老師給我們一次實踐動手的機會,讓我們得到了提升。我期待今后能有更多的機會參與這些課題的制作!
第四篇:微機原理課程設計電子鬧鐘
電子鐘設計
1任務要求
1.1顯示位置:屏幕中央.1.2日期顯示格式“時:分:秒.1.312/24時制可調.1.4在顯示屏上顯示提示語“CURRENT TIME IS:”和當前時間.2工作原理
1時鐘起始時間的設置
先調用DOS操作系統模塊9,在顯示屏上顯示提示語“TIME SYSTEM IS:”,輸入時制12或24后,顯示“CURRENT TIME IS:”,再調用DOS操作系統模塊10,提示要輸入時鐘的起始時間,輸入時間的格式是“時:分:秒”。輸入的時間以字符串形式存放在已定義的存儲器緩存區內,繼而調用TRAN1轉換子程序和MUL10乘10子程序,將存放在存儲器緩存區內的ASCII字符轉換為壓縮BCD碼,并將時、分、秒的值放在寄存器CH、DH、DL中。
2延時程序
調用延時TIME延時中斷服務程序,累加到存放秒值的寄存器DL中,并進行十進制調整。在累加的過程中,不斷地對時、分、秒值進行比較,秒不能等于60,分不能等于60,時不能等于24。秒等于限制值時,則使秒值為0分值加1;分等于限制值時,則使分值為0時值加1;時等于限制值時,則使時值為0;時、分、秒值都不超過限制值時,就轉顯示屏輸出。
3時間顯示
調用DOS操作系統模塊9,可用來顯示存儲器內字符串。由于顯示的字符必須為ASCII碼,因為要調用TRAN2轉換子程序將寄存器CH、DH、DL內壓縮BCD碼字符串轉換成ASCII字符串,字符串最后以字符“$”結束,并按時、分、秒的順序送存儲器緩沖區內。調用DOS操作系統模塊9,(DS:DX)應指向字符串首址。程序一旦進入運行,就將不間斷地在顯示屏顯示時間,要想程序停止運行,可同時在鍵盤按下CTRL和BREAK二鍵。
4程序堆圖 5程序清單
DATA SEGMENT BUFFER DB 10;設置輸入字符串用緩沖區 DB ? DB 10 DUP(?)TS DB 'TIME SYSTEM IS:$' CT DB 'CURRENT TIME IS:$' PM DB 'PM $' AM DB 'AM $' KEEPIP DW 0 KEEPCS DW 0 SR DB ? HOUR DB ? DAT ENDS STA SEGMENT PARA STACK 'STACK' STAPN DB 100 DUP(?)TOP EQU LENGTH STAPN STA ENDS COD SEGMENT START PROC FAR ASSUME CS:COD,DS:DAT,SS:STA MOV AX,DATA MOV DS,AX MOV AX,STA MOV SS,AX MOV AX,TOP MOV SP,AX MOV AH,35H;設置1CH中斷
MOV AL,1CH
INT 21H
;段地址放入ES,偏移地址放入BX
MOV KEEPIP,BX
;保偏移地址存
MOV KEEPCS,ES
;保存段地址
PUSH DS
MOV DX,OFFSET TIME
MOV AX,SEG TIME
MOV DS,AX
MOV AL,1CH
MOV AH,25H
;設置中斷功能調用
INT 21H
POP DS
MOV DX,OFFSET TS
;DOS功能模塊,顯示字符串
MOV AH,9
INT 21H
MOV AH,1
;DOS功能模塊,從鍵盤輸入字符
INT 21H
MOV AH,1
INT 21H
MOV SR,AL
MOV DL,0AH
;”換行“
MOV AH,2
INT 21H
MOV DL,0DH
;”回車“
MOV AH,2
INT 21H
MOV DX,OFFSET CT
;DOS功能模塊,顯示字符串,提示從鍵盤輸入
MOV AH,9
INT 21H
MOV DX,OFFSET BUFFER
MOV AH,10
;DOS功能模塊,從鍵盤輸入字符串到緩沖區
INT 21H
MOV BX,OFFSET BUFFER+2
CALL TRAN1
;將輸入的ASCII碼轉換為BCD碼
INC BX
INC BX
CALL TRAN1
INC BX
INC BX
CALL TRAN1
MOV BX,OFFSET BUFFER+2
MOV AL,[BX]
CALL MUL10
;將BCD碼轉換為壓縮的BCD碼
MOV CH,AL
INC BX
INC BX
MOV AL,[BX]
CALL MUL10
MOV DH,AL
INC BX
INC BX
MOV AL,[BX]
CALL MUL10
MOV DL,AL AGAIN: PUSH CX
MOV CX,18
STI
;開中斷 W:
CMP CX,0
JNE W
CLI
POP CX
MOV AL,DL
ADD AL,1
;”秒“加1
DAA
MOV DL,AL
CMP AL,60H
;”秒“與60比較
JNE DISPY
;小于60S,轉顯示程序
MOV DL,0
;等于60S, ”秒“值為0,”分“+1
MOV AL,DH
ADD AL,1
DAA
MOV DH,AL
CMP AL,60H
;”分“于60比較
JNE DISPY
MOV DH,0
MOV AL,CH
ADD AL,1
DAA
MOV CH,AL
MOV AL, SR
CMP AL,32H
JNE NEXT
JMP DISPY NEXT: MOV AL,CH
MOV HOUR,CH
CMP AL,24H
JNE DISPY
MOV CH,0
DISPY: CALL IOCLR
CALL IOSET1
CALL STAR
CALL IOSET2
CALL STAR
CALL IOSET
MOV BX,OFFSET BUFFER
MOV AL,SR
CMP AL,32H
JNE NEXT2
CALL AD12
MOV AL,HOUR
JMP NEXT1 NEXT2: MOV AL,CH
;”時“值轉換成ASCII碼
NEXT1: CALL TRAN2
;將壓縮BCD碼轉換成ASCII碼
INC BX
MOV AL,':'
MOV [BX],AL
INC BX
MOV AL,DH
;”分“值轉換成ASCII碼
CALL TRAN2
INC BX
MOV AL,':'
MOV [BX],AL
INC BX
MOV AL,DL
;”秒“值轉換成ASCII碼
CALL TRAN2
INC BX
MOV AL,'$'
;顯示字符串結束碼
MOV [BX],AL
PUSH BX
PUSH CX
PUSH DX
MOV DX,OFFSET BUFFER
MOV AH,9
;DOS功能模塊,顯示字符串
INT 21H
POP DX
POP CX
POP BX
JMP AGAIN
CLI
PUSH DS
MOV DX,KEEPIP
MOV AX,KEEPCS
MOV DS,AX
MOV AH,25H
MOV AL,1CH
INT 21H
POP DS
STI
RET START ENDP MUL10 PROC
;將BCD碼轉換為壓縮的BCD碼
ADD AL,AL
DAA
MOV CL,AL
ADD AL,AL
DAA
ADD AL,AL
DAA
ADD AL,CL
DAA
MOV CL,AL
INC BX
MOV AL,[BX]
ADD AL,CL
RET MUL10 ENDP TRAN1 PROC
MOV AL,[BX]
AND AL,0FH
MOV [BX],AL
INC BX
MOV AL,[BX]
AND AL,0FH
MOV [BX],AL
RET TRAN1 ENDP TRAN2 PROC
MOV CL,AL
SHR AL,1
SHR AL,1
SHR AL,1
SHR AL,1
OR AL,30H
MOV [BX],AL
INC BX
MOV AL,CL
AND AL,0FH
OR AL,30H
MOV [BX],AL
RET TRAN2 ENDP IOCLR PROC
PUSH CX
PUSH DX
PUSH BX
PUSH AX
MOV AX,0600H
MOV BH,02
SUB CX,CX
MOV DX,184FH
INT 10H
;ASCII碼轉換成BCD碼
;將壓縮BCD碼轉換成ASCII碼;調用BIOS,清除全屏幕
POP AX
POP BX
POP DX
POP CX
RET IOCLR ENDP TIME
PROC
DEC CX
IRET TIME
ENDP
PUSH DX PUSH BX PUSH AX MOV AH,02 SUB BH,BH MOV DX, 0C23H INT 10H POP AX POP BX POP DX RET IOSET ENDP IOSET1 PROC PUSH AX PUSH BX PUSH DX MOV DX,0A1AH MOV BH,00 MOV AH,02 INT 10H POP DX POP BX POP AX RET IOSET1 ENDP IOSET2 PROC PUSH AX PUSH BX PUSH DX MOV DX,0E1AH MOV BH,00 MOV AH,02 INT 10H
調用BIOS,設置屏幕光標在中央
;POP DX POP BX POP AX RET IOSET2 ENDP STAR PROC PUSH AX PUSH BX PUSH CX PUSH DX MOV AL,3DH MOV BH,0 MOV BL,0CH CMP HOUR,24H JNZ X MOV HOUR,0H X: MOV CX,WORD PTR HOUR INT 10H POP DX POP CX POP BX POP AX RET STAR ENDP AD12 PROC PUSH DX MOV HOUR,CH MOV AL,SR CMP AL,32H JNE ZH MOV AL,HOUR CMP AL,24H JNE NEXT3 MOV CH,0 MOV HOUR,CH JMP S12 NEXT3: CMP AL,12H JBE S12 MOV DX,OFFSET PM MOV AH,9 INT 21H MOV AL,HOUR MOV DH,12H SUB AL,DH DAS MOV HOUR,AL JMP ZH S12: CMP AL,12H JNE Z MOV DX,OFFSET PM MOV AH,9 INT 21H JMP ZH Z: MOV DX,OFFSET AM MOV AH,9 INT 21H ZH: POP DX RET AD12 ENDP COD ENDS END STAR
6設計時遇到的問題及解決方法
在課程設計中遇到的最大的困難是如何利用軟、硬件配合的方式產生中斷,對中斷向量表的裝載還比較模糊,對中斷的初始化、具體設置、中斷返回還不是很清楚,程序設計一度陷入停滯狀態,不知如何是好.于是我又重新翻閱了我們的學習課本,也就是電子工業出版社的《微機原理與接口技術(基于16位機)》,重點研究了第9章《中斷》,通過對這一章的學習,我終于對中斷有了詳細的認識,在設計程序時也容易了很多。
設中斷服務程序入口地址為TIME,則相應的程序如下:
??
KEEPIP DW 0
;設置內存緩沖區,用于暫存 KEEPCS DW 0
;DOS的中斷矢量
??
;在主程序的初始化部分,先取出DOS的中斷矢量并加以保存,然后裝入需要的中斷矢量
MOV AH,35H
;取出DOS的中斷矢量,并送ES:BX
MOV AL,1CH
INT 21H
MOV KEEPIP,BX
;保存DOS的中斷矢量
MOV KEEPCS,ES
PUSH DS;保護DS
MOV DX,OFFSET TIME
;將中斷矢量取代
MOV AX,SEG TIME
;DOS的中斷矢量
MOV DS,AX
MOV AL,1CH
MOV AH,25H
;設置中斷功能調用
INT 21H
POP DS
;恢復DS ??
AGAIN: PUSH CX
MOV CX,18
STI
;開中斷 W:
CMP CX,0
JNE W
CLI ??
TIME
PROC
DEC CX
IRET TIME
ENDP ??
;在程序結尾處,用以下程序恢復DOS的中斷矢量 CLI
PUSH DS
MOV DX,KEEPIP
MOV AX,KEEPCS
MOV DS,AX
MOV AH,25H
MOV AL,1CH
INT 21H
POP DS
STI 7新增功能及實現方法
7.112時制時顯示AM或PM
??
AD12 PROC PUSH DX MOV HOUR,CH MOV AL,SR CMP AL,32H JNE ZH MOV AL,HOUR CMP AL,24H JNE NEXT3 MOV CH,0 MOV HOUR,CH JMP S12 NEXT3: CMP AL,12H JBE S12 MOV DX,OFFSET PM MOV AH,9 INT 21H MOV AL,HOUR MOV DH,12H SUB AL,DH DAS MOV HOUR,AL JMP ZH S12: CMP AL,12H JNE Z MOV DX,OFFSET PM MOV AH,9 INT 21H JMP ZH Z: MOV DX,OFFSET AM MOV AH,9 INT 21H ZH: POP DX RET AD12 ENDP ??
7.2綠色顯示時間
??
IOSET PROC PUSH DX PUSH BX PUSH AX MOV AH,02 SUB BH,BH MOV DX,0C23H INT 10H POP AX POP BX POP DX RET IOSET ENDP ??
7.3在數字上下方各顯示一行個數同小時數的”=“ ??
IOSET1 PROC PUSH AX PUSH BX PUSH DX MOV DX,0A1AH MOV BH,00 MOV AH,02 INT 10H POP DX POP BX POP AX RET IOSET1 ENDP IOSET2 PROC PUSH AX PUSH BX PUSH DX MOV DX,0E1AH MOV BH,00 MOV AH,02 INT 10H POP DX POP BX POP AX RET IOSET2 ENDP STAR PROC PUSH AX PUSH BX PUSH CX PUSH DX MOV AL,3DH MOV BH,0 MOV BL,0CH CMP HOUR,24H JNZ X MOV HOUR,0H X: MOV CX,WORD PTR HOUR INT 10H POP DX POP CX POP BX POP AX RET STAR ENDP ?? 8心得體會
這是我第一次用匯編語言來設計一個小程序,歷時一周終于完成,其間有不少感觸。首先就是借鑒.魯迅先生曾說過要”拿來“,對,在這次課程設計中,就要”拿來"不少子程序,比如將ASCII碼轉換成BCD碼,將BCD碼轉換成壓縮BCD碼,將壓縮BCD碼轉換成ASCII碼等,這些子程序的設計是固定的,因此可以直接從指導資料中調用,至于設置光標的子程序,只需要修改幾個參數就可以,這大大方便了我的設計,為我節省了很多的時間。還有就是指導老師提供的資料很重要.這次課程設計的大部分程序,都可以在李老師提供的資料中找到,這對我的程序設計很有幫助,從這些資料中,我可以看出這個時鐘程序的基本流程,修改一些程序就可以實現這個時鐘的基本功能,添加一些程序就可以實現這個時鐘的附加功能,可以說,如果沒有李老師提供的源程序,我將面臨很大的困難。文章引用自:
第五篇:數電電子時鐘課程設計
專業課程設計報告
題目:數字電子鐘課程設計
系
別
電氣工程系
專業班級
電氣班
學生姓名
指導教師
提交日期
2011年X月X日
一、設計目的3
二、設計要求和設計指標
三、設計內容
3.1方案設計與選擇
3.2原理設計和功能描述
3.2.1數字計時器的設計思想
3.2.2數字電子鐘總體框架圖
3.3單元電路的設計
3.3.1數字電子鐘原理效果圖
3.3.2晶體振蕩器電路
3.3.3分頻器電路
3.3.4時間計數器電路
3.3.5數碼管
3.3.6揚聲器
3.4元器件清單
3.4.1數字電子鐘仿真
四、本設計改進建議
五、感想
六、主要參考文獻
附錄
一、設計目的數字鐘是一種用數字電路技術實現時、分、秒計時的裝置,與機械式時鐘相比具有更高的準確性和直觀性,且無機械裝置,具有更更長的使用壽命,因此得到了廣泛的使用。
數字鐘從原理上講是一種典型的數字電路,其中包括了組合邏輯電路和時序電路。
因此,我們此次設計與制做數字鐘就是為了了解數字鐘的原理,從而學會制作數字鐘.而且通過數字鐘的制作進一步的了解各種在制作中用到的中小規模集成電路的作用及實用方法.且由于數字鐘包括組合邏輯電路和時敘電路.通過它可以進一步學習與掌握各種組合邏輯電路與時序電路的原理與使用方法。
二、設計要求和設計指標
1、設計一個能顯示時、分、秒的數字鐘,顯示時間從00:00:00到23:59:592、設計的電路包括產生時基信號,時、分、秒的計時電路,顯示電路。
3、擴展功能:能實現校時、教分、教秒;整點報時。
三、設計內容
3.1方案設計與選擇
數字電子技術的復雜性和靈活性決定了數字電子鐘的設計方案有多種,如下是我總結的部分方案。
方案一:
脈沖信號源的選擇。用555定時器制作的多諧振蕩器,信號發生器,脈沖芯片等方式都可以作為脈沖信號源,在此我選擇的是多諧振蕩器,主要考慮的是它的易于制作和很好的穩定性。
方案二:
時分秒計數器的選擇。時分秒計數器的選擇同樣有多種,74160N和74161N都是不錯的選擇,74LS160和
74LS161,74LS190和74LS191等等也都可以,考慮到其簡單易用和作為課本上重點內容在此我們選擇的是74160N。
方案三:
譯碼顯示器的選擇。DCD_HEX或7448加上SEVEN_SEG_COM_K等也是多種方案,這里我選擇的是DCD_HEX。
3.2原理設計和功能描述
3.2.1數字計時器的設計思想
要想構成數字鐘,首先應選擇一個脈沖源——能自動地產生穩定的標準時間脈沖信號。而脈沖源產生的脈沖信號地頻率較高,因此,需要進行分頻,使得高頻脈沖信號變成適合于計時的低頻脈沖信號,即“秒脈沖信號”(頻率為1Hz)。經過分頻器輸出的秒脈沖信號到計數器中進行計數。由于計時的規律是:60秒=1分,60分=1小時,24小時=1天,就需要分別設計60進制,24進制計數器,并發出驅動信號。各計數器輸出信號經譯碼器、驅動器到數字顯示器,是“時”、“分”、“秒”得以數字顯示出來。
3.2.2數字電子鐘總體框架圖
圖2-2
3.3單元電路的設計
3.3.1數字電子鐘原理效果圖
圖2-3-1
3.3.2晶體振蕩器電路
晶體振蕩器是電子鐘的核心,晶體振蕩器設計的質量直接影響了整個電的好壞。這里我用555定時器制作了一個多諧振蕩器。
其中R1=57.72
kΩ,R1=115.4
kΩ,C=100nF,Cf=10nF,f=1/0.7(Rw+2R)C=1/[0.7(57.72+2*115.4)*103*100*10-9]≈50Hz。
其產生的頻率為50Hz,然后經過整形、分頻獲得1Hz的秒脈沖。如圖:
圖2-3-2
3.3.3分頻器電路
分頻器是由兩個74160N組成的50進制計數器。則輸出端的頻率則是將原來的50Hz分成1Hz的頻率輸出,實現分頻效果。
圖2-3-3
3.3.4時間計數器電路
時間計數電路由秒個位和秒十位計數器、分個位和分十位計數器、時個位和時十位計數器電路構成,其中秒個位和秒十位計數器、分個位和分十位計數器為60進制計數器,時個位和時十位計數器為24進制計數器,其原理圖如下:
圖2-3-4
3.3.5數碼管
數碼管通常有發光二極管(LED)數碼管和液晶(LCD)數碼管,本設計提供的為LED數碼管DCD_HEX,其已內含譯碼器功能,所以不用再另加譯碼器。
圖2-3-5
3.3.6揚聲器
該揚聲器的額定頻率為200Hz,額定電壓為3V,額定電流為0.05A。
圖2-3-6
3.4元器件清單
元件名稱
數量(個)
DCD_HEX
74160N
555_VIRTUAL
4049BT_5V
74LS00D
57.72kΩ電阻
115.4kΩ電阻
5V直流電源
BUZZER
100nF電容
10nF電容
導線
若干
表2-4
3.4.1數字電子鐘仿真
下圖為仿真結果,仿真開始時,多諧振蕩器產生50Hz的正弦脈沖信號,然后經過分頻器后其輸出的頻率變為1Hz。計數器接收到脈沖信號后開始計數,計數結果顯示在數碼管上。當分秒計數器達到59分59秒,然后再來一個脈沖信號時揚聲器開始發聲,也就是整點報時。下面為其中的一張仿真圖。
圖3-1
四、本設計改進建議
1、應選用石英晶體振蕩器,為了簡化電路分頻選用CD4040。
2、本設計校時電路是將各個位上的使能端引出接一個單刀雙擲開關,一端(1端)接低位的進位信號,另一端(2端)接校時電路。校正某位上的時間時,可以將相應位的開關接到2端,通過撥動校時電路就能實現校時功能。
3、沒有校時電路。
五、感想
(1)
布局設計:要先根據主體電路圖和擴展電路圖想象各個元件的分布位置,哪塊電路板該放哪些元件,如何最大限度利用電路板的空間,怎么樣才能使走線明朗、簡潔。
(2)
布線工藝:一開始看到電線像蜘蛛網一樣,密密麻麻的,非常難看懂和檢查,后來看了預先設計的線路,而且用各種顏色的導線區分,顯得明朗清晰。
(3)
課題核心及使用價值:該課題用一個生活中的實力展示了振蕩電路、計數電路、譯碼電路的作用與銜接過程,揭示了電子鐘內部電路圖及其各部分的作用。我們通過此課題,結合上學期學習的模擬電子、數字電子技術的理論課知識,可以系統地學習電子設計與測試的流程、方法、原理,為我們以后設計更加專業、復雜的集成電路打下雄厚的基礎。
六、主要參考文獻
[1]
清華大學電子學教研組編,童詩白、華成英主編:《
模擬電子技術基礎
》
[
M
]
.(第四版).北京:高等教育出版社,2006.5(2009重印)
[2]華中工學院電子學教研室編,康華光主編:《電子
基礎——數字部分》
[M]
.(第四版).北京:高等教育出版社,1988年
[3]
清華大學電子學教研組編,閻
石主編:《
數學電子技術基礎
》
[M]
.(第五版).北京:高等教育出版社,2006.5(2008年重印)
[4]遼寧工程技術大學電工與電子技術實驗中心組編,馬玉芳、樸忠學、張國軍主編:《
電子技術實驗指導書
》,2010.3
[5]朱清慧、張鳳蕊、翟天蒿、王志奎編著:《
Proteus教程——電子線路設計、制版與仿真
》
[M]
.北京:清華大學教育出版社,2008.9
[6]熊幸明主編:《電子電工技能訓練》
[M].北京:電子工業出版社,2005年
華nan理工大學guang州學院
附錄