⑴ 跪求單片機at89c51 0到99秒計數器程序
看不見你接線圖,先來一個C語言的,匯編確實沒C語言方便
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar a , b=0;
sbit wei1=P1.0;
sbit wei2=P1.1;
//共陰數碼管七段碼
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77};
void Delay1ms(uint i) //1ms延時程序
{
uint j;
for(;i>0;i--)
{
for(j=0;j<164;j++)
{;}
}
}
void display( uchar a)) //顯示程序
{
P0= table[a/10];//十位
wei1=1;
Delay1ms(2) ;
wei1=0;
P0= table[a%10];//個位
wei2=1;
Delay1ms(2) ;
wei2=0;
}
void main(void )//主程序
{
TMOD=0x01;// 定時器0工作方式一
ET0=1;
EA=1;
TH0=(65536-50000)/256;//定時50ms
TL0=(65536-50000)%256;
TR0=1;
while(1)
{
display(b);
}
}
//中斷子程序
void Timer0(void) interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
a++;
if(a==20)//20次是1 秒
{ a=0;b++;}
if(b==100)
{ b=0;}
}
⑵ 求單片機課程設計 用匯編語言設計計數器(要求從0~9999,在數碼管上顯示)!!!!!!!!!!!!!
單片機課程設計報告
題 目 計時器設計
班 級 電 信 093
學 號 090301334
姓 名 周 劍
時 間 2010.12.20
成 績
指導教師 石巧雲
目錄
一、 前言………………………………………………………………1
單片機的應用介紹…………………………………………………1
二、 課程設計的目的和要求…………………………………………2
(一)課程設計的目的…………………………………………… 2
(二)課程設計的基本要求……………………………………… 3
三、 總體設計…………………………………………………………3
(一)工作原理…………………………………………………… 3
(二)硬體總體設計……………………………………………… 4
(三)軟體總體設計……………………………………………… 5
四、綜合調試………………………………………………………… 7
(一)keil調試 …………………………………………………… 8
(二)Proteus調試………………………………………………… 9
五、結束語…………………………………………………………… 9
六、參考文獻 …………………………………………………………10
前言
單片機的應用介紹
單片機又稱單片微控制器,它不是完成某一個邏輯功能的晶元,而是把一個計算機系統集成到一個晶元上。概括的講:一塊晶元就成了一台計算機。它的體積小、質量輕、價格便宜、為學習、應用和開發提供了便利條件。同時,學習使用單片機是了解計算機原理與結構的最佳選擇。
單片機是指一個集成在一塊晶元上的完整計算機系統。盡管他的大部分功能集成在一塊小晶元上,但是它具有一個完整計算機所需要的大部分部件:CPU、內存、內部和外部匯流排系統,目前大部分還會具有外存。同時集成諸如通訊介面、定時器,實時時鍾等外圍設備。而現在最強大的單片機系統甚至可以將聲音、圖像、網路、復雜的輸入輸出系統集成在一塊晶元上。
目前單片機滲透到我們生活的各個領域,幾乎很難找到哪個領域沒有單片機的蹤跡。導彈的導航裝置,飛機上各種儀表的控制,計算機的網路通訊與數據傳輸,工業自動化過程的實時控制和數據處理,廣泛使用的各種智能IC卡,民用豪華轎車的安全保障系統,錄象機、攝象機、全自動洗衣機的控制,以及程式控制玩具、電子寵物等等,這些都離不開單片機。更不用說自動控制領域的機器人、智能儀表、醫療器械了。因此,單片機的學習、開發與應用將造就一批計算機應用單片機的應用介紹
單片機又稱單片微控制器,它不是完成某一個邏輯功能的晶元,而是把一個計算機系統集成到一個晶元上。概括的講:一塊晶元就成了一台計算機。它的體積小、質量輕、價格便宜、為學習、應用和開發提供了便利條件。同時,學習使用單片機是了解計算機原理與結構的最佳選擇。
單片機是指一個集成在一塊晶元上的完整計算機系統。盡管他的大部分功能集成在一塊小晶元上,但是它具有一個完整計算機所需要的大部分部件:CPU、內存、內部和外部匯流排系統,目前大部分還會具有外存。同時集成諸如通訊介面、定時器,實時時鍾等外圍設備。而現在最強大的單片機系統甚至可以將聲音、圖像、網路、復雜的輸入輸出系統集成在一塊晶元上。
目前單片機滲透到我們生活的各個領域,幾乎很難找到哪個領域沒有單片機的蹤跡。導彈的導航裝置,飛機上各種儀表的控制,計算機的網路通訊與數據傳輸,工業自動化過程的實時控制和數據處理,廣泛使用的各種智能IC卡,民用豪華轎車的安全保障系統,錄象機、攝象機、全自動洗衣機的控制,以及程式控制玩具、電子寵物等等,這些都離不開單片機。更不用說自動控制領域的機器人、智能儀表、醫療器械了。因此,單片機的學習、開發與應用將造就一批計算機應
智能化控制的科學家、工程師。
與智能化控制的科學家、工程師。
單片機廣泛應用於儀器儀表、家用電器、醫用設備、航空航天、專用設備的智能化管理及過程式控制制等領域,大致可分如下幾個范疇:
(1.在智能儀器儀表上的應用
(2.在工業控制中的應用
(3.在家用電器中的應用
(4.在計算機網路和通信領域中的應用
(5.單片機在醫用設備領域中的應用
(6.在各種大型電器中的模塊化應用
此外,單片機在工商,金融,科研、教育,國防航空航天等領域都有著十分廣泛的用途。
二、 課程設計的目的和要求
(一)課程設計的目的
1. 進一步熟悉和掌握8051單片機的結構及工作原理。
2. 掌握單片機的介面技術及相關外圍晶元的外特性,控制方法
3. 通過課程設計,掌握以單片機核心的電路設計的基本方法和技術,了解表關電路參數的計算方法。
4. 通過實際程序設計和調試,逐步掌握模塊化程序設計方法和調試技術。
5. 通過完成一個包括電路設計和程序開發的完整過程,使學生了解開發一單片機應用系統的全過程,為今後從事相應打下基礎。
(二)課程設計的基本要求
用AT89C51 單片機的定時/計數器T0產生一秒的定時時間,作為秒計數時間,但一秒產生時,秒計數加1,秒計數加到60時,自動從0開始。單片機晶振頻率為12MHz。
二、 總體設計
(一) 工作原理
LED顯示器的結構與原理
1、結構種類
七段LED顯示器(數碼管)系發光器件的一種。常用的LED發光器件有兩類:數碼管和點陣。數碼管內部有七個條形發光二極體和一個小圓點發光二極體組成,根據各管的亮暗組成字元。常見數碼管有10根管腳。管腳排列如下圖(a)所示。其中COM為公共端,根據內部發光二極體的接線形式可分為共陰極和共陽極兩種。如下圖(b)(c)所示,使用時,共陰極數碼管公共端接地,共陽極數碼管公共端接電源。發光二極體需5~10mA的驅動電流才能正常發光,一般需加限流電阻控制電流的大小。
2、顯示原理
LED數碼管的a~g七個發光二極體。加正電壓的發光加零電壓的不能發光,不同亮暗的組合能形成不同的字元,這種組合稱為字型碼。共陽極和共陰極的字型碼是不同的,如下圖所示。
LED字元顯示代碼表
顯示 段符號 十六進制代碼
dp g f e d c b a 共陰極 共陽極
0 0 0 1 1 1 1 1 1 3FH C0H
1 0 0 0 0 0 1 1 0 06H F9H
2 0 1 0 1 1 0 1 1 5BH A4H
3 0 1 0 0 1 1 1 1 4FH B0H
4 0 1 1 0 0 1 1 0 66H 99H
5 0 1 1 0 1 1 0 1 6DH 92H
6 0 1 1 1 1 1 0 1 7DH 82H
7 0 0 0 0 0 1 1 1 07H F8H
8 0 1 1 1 1 1 1 1 7FH 80H
9 0 1 1 0 1 1 1 1 6FH 90H
(二) 硬體總體設計
1、主要元器件選擇
主要元器件選用型號和數量如下:
1個AT89C51(單片機) 1個CRYSTAL(晶振) 2個CAP(電容)
3個RES(電阻) 2個7SEG-COM-CATHOD(共陰極數碼管)
1個CAP-ELEC(電解電容)
2、系統板上硬體連線
(1. 把「單片機系統」區域中的P0.0/AD0-P0.7/AD7埠用8芯排線連接到「四路靜態數碼顯示模塊」區域中的任一個a-h埠上;要求:P0.0/AD0對應著a,P0.1/AD1對應著b,……,P0.7/AD7對應著h。
(2. 把「單片機系統」區域中的P2.0/A8-P2.7/A15埠用8芯排線連接到「四路靜態數碼顯示模塊」區域中的任一個a-h埠上;要求:P2.0/A8對應著a,P2.1/A9對應著b,……,P2.7/A15對應著h。
3、計時器電原理圖
(三)軟體總體設計
1、程序設計內容
(1.在設計過程中我們用一個存儲單元作為秒計數單元,當一秒鍾到來時,就讓秒計數單元加1,當秒計數達到60時,就自動返回到0,從新秒計數。
(2.對於秒計數單元中的數據要把它十位數和個數分開,方法仍採用對10整除和對10求余。
(3.在數碼上顯示,仍通過查表的方式完成。
(4.一秒時間的產生在這里我們採用軟體精確延時的方法來完成,經過精確計算得到1秒時間為1.002秒。
2、延時1秒子程序
DELY1S: MOV R5,#100
D2: MOV R6,#20
D1: MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
DJNZ R5,D2
RET
3、程序流程圖
4、匯編源程序設計
Second EQU 30H
ORG 0
START: MOV Second,#00H ;設置顯示初值為00
NEXT: MOV A,Second
MOV B,#10
DIV AB ;十位數存於A中,個位數存於B中
MOV DPTR,#TABLE ;字型碼地址送DPTR
MOVC A,@A+DPTR ;查十位字型碼
MOV P1,A ;送P1口顯示
MOV A,B
MOVC A,@A+DPTR ;查個位字型碼
MOV P2,A ;送P2口顯示
LCALL DELY1S ;調用延時1秒子程序DELY1S
INC Second ;顯示值加1
MOV A,Second
CJNE A,#90,NEXT ;顯示值不為90轉到NEXT執行
LJMP START ;返回到主程序
DELY1S: MOV R5,#100 ;1S延時子程序
D2: MOV R6,#20
D1: MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
DJNZ R5,D2
RET
TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;共陰數碼管字型碼
END
四、綜合調試
(一)Keil調試
程序調試完成圖
(二)Proteus調試
五、結束語
完成情況:經過兩個星期的努力,我們一組成員終於完成了秒錶控制方案的設計,主要是用AT89C51單片機實現0-99秒計時器控制方案。本設計還包含數碼管顯示部分,可直接顯示時間可方便觀察。通過這次課程設計,使我得到了一次用專業知識和專業技能去分析問題、解決問題全面系統的鍛煉。使我在單片機的基本原理、單片機應用系統開發過程,以及用匯編語言設計程序的思路技巧等方面都能向前邁了一大步,為日後成為合格的應用型人才打下良好的基礎。
六、參考文獻
[1]. 江力主編,單片機原理與應用技術,清華大學出版社,2008年4月第6次印刷
[2].蔡駿主編,單片機實驗指導教程,安徽大學出版社,2008年7月第一次印刷
[3]. http://www.51c51.com/51test/cc411.htm
⑶ 麻煩大神用單片機c51,編0-99共陽極計數器程序,謝謝!
#include<reg51.h>
#defineucharunsignedchar;
uchardistab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};//0到f
ucharnumber,dat,time;
voidt0isr()interrupt1
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
number++;
if(number>1)number=0;
switch(number)
{
case0:P2=0x02;P0=distab[dat/10];
break;
case1:P2=0x01;P0=distab[dat%10];
break;
default:break;
}
}
voidt1isr()interrupt3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
time++;
if(time>=20)
{
time=0;
dat++;
dat%=100;
}
}
main()
{
TMOD=0x11;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
TR1=1;
ET1=1;
TR0=1;
ET0=1;
EA=1;
while(1);
}
⑷ 0到99可增減計數器的單片機系統。。求匯編語言程序。在線等。
ORG 0000H
LJMP START
ORG 0030H
P2.0 EQU ADD
P2.1 EQU DEC
START: MOV A,#00H
MOV B,10
MOV DPTR,#LED_Table
MAIN: PUSH ACC
DIV AB //A除以B,得數存A余數存B(好像是這樣,記不太清了)
MOVC A,@A+DPTR //查表,得到十位上的數字對應的LED管碼
/*這里加入把管碼通過單片機引腳*/
/*寫到LED管的程序,具體看你的電路了*/
MOV A,B
MOVC A,@A+DPTR //查表,得到各位商的LED管碼
/*這里加入把管碼通過單片機引腳*/
/*寫到LED管的程序,具體看你的電路了*/
POP ACC
JNB ADD,Countadd
JNB DEC Countdec
JMP MAIN
Countadd: CJNE A,99,add
MOV A,0
SJMP BACK
add: INC ACC
BACK1: RET
Countdec: CJNE A,0,dec
MOV A,99
SJMP BACK2
dec: DEC ACC
BACK2: RET
LED_Table: DB .......................................................
DB ....................................................... //LED 1,,2,3......到9對應的管碼,按順序
END
改進了一下,沒有測試過,。。。。
⑸ 設計十進制0-99的計數器,採用按鍵計數,數碼管顯示,採用單片機內部的定時計數器完成計數功能
呵呵,此軟體10分鍾完成不了即可認為51單片機沒學好。
⑹ 設計十進制0-99的計數器,採用按鍵計數,數碼管顯示,採用單片機內部的定時計數器完成計數功能
看這個,跟你要求的差不多,你自己稍稍改下就OK啦~(≧▽≦)/~
#include<reg51.h>
#defineucharunsignedchar
#defineuintunsignedint
ucharDSY_CODE[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F};
ucharcount=0;
voidmain()
{
P0=0X00;
P2=0X00;
TMOD=0X06;//TMOD=00000110B,C/T=1,工作於計數方式
TH0=TL0=256-1;
ET0=1;//允許T0中斷
EX0=1;//允許INT0中斷
EA=1;
IP=0X02;//定時器0中斷優先
IT0=1;//INT0中斷觸發為下降沿觸發
TR0=1;//啟動T0
while(1)
{
P0=DSY_CODE[count/10];
P2=DSY_CODE[count%10];
}
}
voidclear_counter()interrupt0
{
count=0;
}
voidkey_counter()interrupt1
{
count=(count+1)%100;
}
⑺ 單片機計數器0到999的編程怎麼寫
估計你說的是匯編語言。我以51為標准假設晶振為6Mhz.
計算計數初值是0CEH。計數器工作方式2。
程序:mov ie, #00h 關中斷
mov tmod,#02h 置計數器工作方式2
mov th0,#0ceh 保存計數初值
mov tl0,#0ceh 值計數初值
mov r0,#0ah 置循環次數
setb tr 啟動計數器
loop:jbc tf0,loop1 判斷溢出標志位
ajmp loop
loop1:cjnz r0,loop xunhuan
reti 返回主程序
⑻ 00-99計數器設計。 利用單片機來製作一個手動計數器,還有模擬圖,謝謝
ORG 0000H
JMP BEGIN
ORG 0030H
TABLE: ; 共陰極數碼管顯示代碼表
DB 3FH,06H,5BH,4FH,66H ;01234
DB 6DH,7DH,07H,7FH,6fh ;56789
;---------------------------------------
BEGIN: MOV P0,#0 ;數碼管初始化,不顯示
MOV P1,#0 ;數碼管初始化,不顯示
MOV 30H,#0 ;數據初始化為0
LOOP:
JB P3.2,LOOP1 ;加1鍵如果未按下轉LOOP1
JNB P3.2,$ ;鍵被按下,等待鍵抬起
INC 30H ;數據加1
LCALL DIS ;顯示
SJMP LOOP ;會循環起點
LOOP1:
JB P3.6,LOOP ;清零鍵如果未按轉循環起點
JNB P3.6,$ ;鍵被按下等待按鍵抬起
MOV 30H,#0 ;數據清零
LCALL DIS ;顯示
SJMP LOOP ;會循環起點
DIS:
MOV A,30H ;數據送A
CJNE A,#100,DIS1
CLR A
MOV 30H,A
DIS1:
MOV B,#10 ;除數送B
DIV AB ;除法運算
MOV 32H,A ;十位數送32H
MOV 33H,B ;個位數送33H
MOV DPTR,#TABLE;段碼首地址送數據指針
MOV A,33H ;個位數送A
MOVC A,@A+DPTR ;查表
MOV P1,A ;結果送P1
MOV A,32H ;十位數送A
MOVC A,@A+DPTR ;查表
MOV P0,A ;結果送P0
RET ;子程序返回
END ;程序結束
⑼ 單片機用匯編寫兩個數碼管顯示0到99循環的程序
1、新建項目,做好准備。
⑽ 利用AT89S51單片機來製作一個手動00-99計數器。
teble里的值就是共陰8段(含小數點)數碼管的段碼。
8段從上面一橫開始順時針依次為a、b、c、d、e、f、g(中間的橫)和h(小數點),分別接在IO口的0~7
例如要顯示0,則段碼為00111111即0x3f。
其它,你可自行推出。