當前位置:首頁 » 編程軟體 » 時辰鍾編程

時辰鍾編程

發布時間: 2024-06-14 17:54:54

A. 用plc編程24小時時鍾程序

沒有分沒有寫程序動力,告訴你思路吧
1、OB35
設定1000ms循環
2、在ob35中個累加,並且安分鍾和小時寄存
3、比較,當分鍾的寄存器=30時,繼電器輸出1s
4、分鍾繼存器=0時,寫一段循環程序:當當前小時大於臨時寄存器
進行下面的程序,繼電器的輸出1s和一個臨時寄存器的累加,
當臨時寄存器的累加值大於當前小時,就不進行循環,
5、秒閃爍這個就是500ms輸出,然後弄一個500ms定時器進行不輸出。
就這么多了,很簡單的程序,

B. VHDL數字時鍾完整程序代碼(要求要有元件例化,並且有按鍵消抖),謝謝啦啦啦啦

圖11
程序如下:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity xuan21 is
Port ( alarm,a,b: in std_logic;
y:out std_logic);
end xuan21 ;

architecture one of xuan21 is
begin
process(alarm,a,b)
begin
if alarm='0' then y<=a;else y<=b;
end if;
end process;
end one;
模擬波形如下圖12:

圖12
(2)三位二選一:
模塊圖如圖13。用以進行正常計時時間與鬧鈴時間顯示的選擇,alarm輸入為按鍵。當alarm按鍵未曾按下時二選一選擇器會選擇輸出顯示正常的計時結果,否則當alarm按鍵按下時選擇器將選擇輸出顯示鬧鈴時間顯示。

圖13
程序如下:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity x213 is
Port ( alarm : in std_logic;
y:out std_logic_vector(3 downto 0);
a,b: in std_logic_vector(3 downto 0));

end x213;

architecture one of x213 is
begin
process(alarm,a,b)
begin
if alarm='0' then y<=a;else y<=b;
end if;
end process;
end one;
模擬結果如下圖14:

圖14
8、整點報時及鬧時:
模塊圖如圖15。在59分51秒、53秒、55秒、57秒給揚聲器賦以低音512Hz信號,在59分59秒給揚聲器賦以高音1024Hz信號,音響持續1秒鍾,在1024Hz音響結束時刻為整點。當系統時間與鬧鈴時間相同時給揚聲器賦以高音1024Hz信號。鬧時時間為一分鍾。

圖15
程序如下:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity voice is
Port ( hou1,huo0,min1,min0,sec1,sec0,hh,hl,mh,ml: std_logic_vector(3 downto 0);
in_1000,in_500:in std_logic;
q : out std_logic);
end voice;

architecture one of voice is
begin
process(min1,min0,sec1,sec0)
begin
if min1="0101" and min0="1001" and sec1="0101" then
if sec0="0001" or sec0="0011" or sec0="0101" or sec0="0111"
then q<=in_500;
elsif sec1="0101" and sec0="1001" then q<=in_1000;
else q<='0';
end if;
else q<='0';
end if;
if min1=mh and min0=ml and hou1=hh and huo0=hl then
q<=in_1000;
end if;
end process;
end one;
模擬波形如下圖16

圖16
9、頂層原理圖:

三、感想

通過這次設計,既復習了以前所學的知識,也進一步加深了對EDA的了解,讓我對它有了更加濃厚的興趣。特別是當每一個子模塊編寫調試成功時,心裡特別的開心。但是在畫頂層原理圖時,遇到了不少問題,最大的問題就是根本沒有把各個模塊的VHD文件以及生成的器件都全部放在頂層文件的文件夾內,還有就是程序設計的時候考慮的不夠全面,沒有聯系著各個模式以及實驗板的情況來編寫程序,以至於多考慮編寫了解碼電路而浪費了很多時間。在波形模擬時,也遇到了一點困難,想要的結果不能在波形上得到正確的顯示
:在分頻模塊中,設定輸入的時鍾信號後,卻只有二分頻的結果,其餘三個分頻始終沒反應。後來,在數十次的調試之後,才發現是因為規定的信號量范圍太大且信號的初始值隨機,從而不能得到所要的結果。還有的模擬圖根本就不出波形,怎麼調節都不管用,後來才知道原來是路徑不正確,路徑中不可以有漢字。真是細節決定成敗啊!總的來說,這次設計的數字鍾還是比較成功的,有點小小的成就感,終於覺得平時所學的知識有了實用的價值,達到了理論與實際相結合的目的,不僅學到了不少知識,而且鍛煉了自己的能力,使自己對以後的路有了更加清楚的認識,同時,對未來有了更多的信心。

四、參考資料:
1、潘松,王國棟,VHDL實用教程〔M〕.成都:電子科技大學出版社,2000.(1)
2、崔建明主編,電工電子EDA模擬技術北京:高等教育出版社,2004
3、李衍編著,EDA技術入門與提高王行西安:西安電子科技大學出版社,2005
4、侯繼紅,李向東主編,EDA實用技術教程北京:中國電力出版社,2004
5、沈明山編著,EDA技術及可編程器件應用實訓北京:科學出版社,2004
6、侯伯亨等,VHDL硬體描述語言與數字邏輯電路設計西安: 西安電子科技大學出版社,1997
7、辛春艷編著,VHDL硬體描述語言北京:國防工業出版社,2002 就這些

C. 可編程作息時間控制器程序設計

主程序: 在程序開始時,首先初始化,設置中斷0源允許、總允許為一,兩個定時器的工作模式為一模式,整個程序由P2.6接低電平時啟動,啟動後,進入A段工作。在A短工作中調用顯示子程序,A段工作完時進入B段工作,每段工作時都要調用顯示子程序,,最後一段工作完時,關閉顯示,即對P2送入0FFH
顯示子程序:首先,對定時器賦初值,然後進行拆字,拆字採用除以十進行,除以十後,分別把商和余數送到顯緩單元,再查七段碼,把七段碼送到P1,送字位口到P2口,進行動態顯示,每次顯示一位時延時255個指令周期(即FFH個指令周期),四位顯示完後,再進行多次掃描,保證人眼看不到閃爍,最後判斷設定的工作時間到沒,到了幾跳出顯示子程序。
中斷程序:進入中斷後輸出報警信號,同時顯示器全部顯示0,,最後跳出中斷。
四:程序及其說明:
1.程序:
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP BAOJING
ORG 0010H
;初始化程序
MAIN:SETB EA ;設置中斷
SETB EX0
CLR IT0
MOV TMOD,#11H ;設置定時器工作模式
SETB P3.4 ;驅動繼電器
SETB P3.5
SETB P3.6
SETB P3.7
HERE:JB P2.6,HERE ;判斷是否啟動
;進入工作階段
GONGZUO:MOV 41H,#0AH ;工作於A段
MOV R7,#0AH ;A段工作時間
CLR P3.4 ;驅動外部繼電器
LCALL SCAN ;調顯示程序
SETB P3.4 ;關斷外部驅動
MOV 41H,#0BH ;工作於B段
MOV R7,#14H ;B段工作時間
CLR P3.5 ;驅動外部繼電器
LCALL SCAN ;調顯示程序
SETB P3.5 ;關斷外部驅動
MOV 41H,#0CH ;工作於C段
MOV R7,#1EH ;C段工作時間
CLR P3.6 ;驅動外部繼電器
LCALL SCAN ;調顯示程序
SETB P3.6 ;關斷外部驅動
MOV 41H,#0DH ;工作於D段
MOV R7,#28H
CLR P3.7 ;驅動外部繼電器
LCALL SCAN ;調顯示程序
SETB P3.7 ;關斷外部驅動
MOV P2,#0FFH ;關顯示
LJMP HERE ;返回判斷處,確定是否繼續工作
;中斷報警程序
BAOJING: MOV P2.4,#00H ;指示燈亮
Mov P2.5,#00H
MOV TL0,#0E0H ;定時20ms
MOV TH0,#0B1H
SETB TR0 ;啟動定時
LP:MOV P1,#3FH ; 全部顯示為零
MOV P2,#00H
MOV P2.5,#00H ;揚聲器工作
JNB TF0,LP ;查詢定時時間到否
SETB P2.4 ;關指示燈
SETB P2.5 ;關揚聲器
RETI
;顯示子程序
ORG 0F00H
SCAN: MOV 42H,#0EH ;「—」(橫線)的七段碼
MOV R1,#32H ;延時常數
MOV TL1,#0E0H ;定時20ms的常數
MOV TH1,#0B1H
LP1: MOV A,R7 ;拆字程序(採用除法拆字)
MOV B,#10
DIV AB
MOV 43H,A ;送顯緩單元
MOV 44H,B
LP2: MOV R0,#41H ;設置顯緩的初始單元
MOV R4,#0FFH ;延時常數
MOV R5,#0FEH ;送字位口
LP3: MOV A,@R0
MOV P2,#0FFH ;關顯示
MOV DPTR,#TAB ;查七段碼、顯示
MOVC A,@A+DPTR
MOV P1,A
MOV P2,R5
LP4: DJNZ R4,LP4
INC R0 ;修改指針
MOV A,R5 ;改變顯示單元
RL A
MOV R5,A
JB ACC.4,LP3 ;判斷四位是否顯示完
SETB TR1 ;啟動定時器
JNB TF1,LP2 ;判斷定時時間是否到
DJNZ R1,LP2 ;延時一秒是否到
DJNZ R7,LP1 ;判斷設定時間是否到
RET
ORG 10FFH
;七段碼表單
TAB: DB 3FH ,06H,5BH, 4FH, 66H,6DH , 7DH
DB 07H, 7FH,6FH,77H, 7CH,39H, 5EH, 40H
2.說明:
主程序:設整個系統工作有四個階段,分為ABCD段,每段工作時間設為10S、20S、30S、40S,在程序的初始化階段設定定時器的工作模式、中斷允許,程序的運行由單片機的P2.6腳接低電平啟動,進入工作階段,在每個工作階段顯示工作段數和剩餘工作時間。
在A段工作時,把「A」這個字元送達41H顯緩單元,再設定A段的工作時間,送到R7寄存器中,設定對應的輸出腳的工作電平值,然後調顯示子程序,A段工作完畢,關閉對應的驅動輸出腳。
B、C、D段工作均和A段工作相似,只是驅動不同的輸出對象,最後一段工作完後,對P2口賦值高電平,關所有的顯示,最後跳回判斷處,判斷是否繼續工作。
顯示子程序:在顯示子程序中因為每段工作時,均要顯示「—」,所以在開始時把「—」的對應序號(在本程序的七段碼表中對應的序號為0EH)送到顯緩單元,對定時器T1定時20ms進行賦初值,計算初值的公式為:
T1初值=2^n-fosc/12×t
由於定時器工作在1模式,振盪頻率為12MHZ,所以計時器T1的初值為:E0B1(十六進制)
將設定的時間進行拆字,然後送到顯緩單元。拆字採用除法的方式進行,將定時時間送到寄存器A中,然後在B中送常數10,經過相除後在寄存器A中得到高位送到顯緩43H中,在寄存器B中得到低位送到顯緩44H單元中,顯緩單元指針首先指向顯緩首地址,通過變址定址方式查詢對應的七段碼送到P1口(字形口),對P2口送入字位口,每個顯示位顯示後經過延時255指令周期再進入下一步工作。每位顯示完後,修改顯示單元的指針,對指針單元的當前值自加一,然後對字位口進行左移,修改顯示單元,再進行判斷四位是否顯示完,即判斷字位口的第五位是否為1,若為1,則程序轉移,繼續顯示;若為0,則依次執行。四位顯示完後,啟動定時器1,定時20ms,查詢TF1的值,若TF1為0,則在此等待,若TF1為1,則R1自減1並判斷是否為0,若不為0,則轉移到顯示部分,若為0,則順序執行(即判斷1S到否);1S到則R7自減1並判斷R7是否為0,若不為0,轉移到拆字部分,若為0,則跳出調用(即判斷每段工作時間到設定時間沒有)。
中斷程序:若外部出現故障(外部故障用P3.2接低電平表示),P2.4、P2.5接低電平(即輸出報警信號,指示燈亮,揚聲器發出聲音),對定時器定T0時20ms賦初值,計算公式為:
T0初值=2^n-fosc/12×t
由於定時器工作在1模式,振盪頻率為12MHZ,所以計時器T1的初值為:E0B1(十六進制)
對P1口送入「0」的七段碼,P2口送入00,每個顯示單元全部顯示為0,啟動定時器,若定時時間沒有到,則轉到顯示處,繼續讓全部顯示0,,若時間到,則對P2.4、P2.5全部送入高電平,關閉報警提示,中斷返回。
七段碼表單:將要顯示的數碼或字母的七段碼按在日常生活中的默認順序定義在一個表單中,通過把表單的首地址付給DPTR,再把需要顯示的數字或字母的對應序號送到寄存器A中,通過變址定址的方式(即MOVC指令)即可查出對應的七段碼。 希望被採納啊!!好長時間菜找到

D. 西門子PLC時鍾指令晚上19時到早晨06怎麼樣編程

如圖所示,READ_RTC是時鍾讀取指令,讀取完後,VB0為年,VB1為月,VB2為日,VB3為時,VB4為分,VB5為秒,VB7為星期。因此用VB3做比較指令,與19和6進行比較就可以了。

望採納。。。。。。

E. 用單片機設計一個時鍾,可顯示時和分,可以調時間,也要有鬧鍾功能,要有設計的電路圖

其實不用定時中斷也能實現功能:
#include<reg51.h> 主函數
unsigned char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};定義0-9數組
unsigned int tmp;定義變數
void delay(unsigned int xms)定義延時函數
{unsigned int j,i;
for(i=0;i<xms;i++)
for(j=0;j<100;j++);
}
void disp()定義子函數
{
P1=tmp;
delay(1);
P2=0xff;
tmp=tmp<<1;
}
void main( )
{

unsigned char z,s=00,m=00,h=00;給時鍾初始值
while(1)
{
for(z=0;z<100;z++)
{
tmp=0x01;
P2=tab[h/10];小時顯示

disp();
P2=tab[h%10];

disp();
P2=tab[m/10];分鍾顯示

disp();
P2=tab[m%10];

disp();
P2=tab[s/10];秒顯示

disp();
P2=tab[s%10];

disp();

}
s++;
while(s==60)秒進一位,到60清0
{
m++;
s=00;
}
while(m==60)分鍾進一位,到60清0

{
h++;
m=00;
}
while(h==24)小時進一位,到24清0
{
h=00;
}

}

}

熱點內容
c語言課程總結 發布:2024-07-25 15:06:39 瀏覽:896
安卓廣告怎麼賺錢 發布:2024-07-25 15:02:24 瀏覽:894
怎麼看電腦基本配置 發布:2024-07-25 14:57:54 瀏覽:953
nettyandroid 發布:2024-07-25 14:57:52 瀏覽:504
php圖片二進制字元串 發布:2024-07-25 14:55:58 瀏覽:485
安卓手機怎麼找到刪掉的圖片 發布:2024-07-25 14:27:44 瀏覽:476
路由密碼是什麼意思 發布:2024-07-25 14:24:19 瀏覽:300
安卓手機後台鍵是哪個鍵 發布:2024-07-25 14:23:35 瀏覽:165
資料庫原理視頻 發布:2024-07-25 14:15:18 瀏覽:608
安卓通話攔截哪裡設置 發布:2024-07-25 13:50:21 瀏覽:920