熱門(mén): 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂(lè)園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
|
發(fā)布時(shí)間: 2018-7-18 21:57
正文摘要:請(qǐng)問(wèn)用這個(gè)圖編寫(xiě)keil工程代碼,使用外部中斷和定時(shí)器知識(shí),實(shí)現(xiàn)gif圖中的功能:按鍵第一次按下,數(shù)碼管數(shù)值自動(dòng)每秒加一(按16進(jìn)制從0加到F),加到F自動(dòng)清零。用按鍵接到外部中斷0的引腳(P3^2),用外部中斷控制 ... |
laisinanshi 發(fā)表于 2018-7-21 15:18 誰(shuí)幫我看看這有啥問(wèn)題啊 |
|
#include"reg51.h" #define m P0 typedef unsigned int u16; //對(duì)數(shù)據(jù)類型進(jìn)行聲明定義 typedef unsigned char u8; u8 i=0,k=0,j=0,T; sbit led=P2^5; sbit anjian=P3^2; u8 code smgduan[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//顯示0~F的值 void delay1ms() //誤差 0us { unsigned char a,b,c; for(c=1;c>0;c--) for(b=142;b>0;b--) for(a=2;a>0;a--); } void display() { led=0; while(j<16) { P0=smgduan[j]; delay1ms(); if(i==15) { i=0; j++; } } // delay1ms(); } void kk() { if(anjian==0) { delay1ms(); if(anjian==0) { TR0=!TR0; while(anjian==0) display(); } } } void zhongduan() { TMOD=0x01; TH0=0x3c; TL0=0xb0; //定時(shí)50ms //設(shè)置INT0 // IT0=1;//跳變沿出發(fā)方式(下降沿) // EX0=1;//打開(kāi)INT0的中斷允許。 //設(shè)置INT1 TR1=1; ET1=1; EA=1;//打開(kāi)總中斷 } /* void Int0() interrupt 0 //外部中斷0的中斷函數(shù) { delay1ms(); //延時(shí)消抖 while(1) { kk(); } } */ void main() { zhongduan(); P0=smgduan[0]; while(1) { // display(); kk(); } } void timer_0() interrupt 1 //定時(shí)器中斷函數(shù) { TH0=0x3c; TL0=0xb0; //定時(shí)50ms k++; if(k==20) { i++; k=0; } } |
| #include"reg51.h" #define m P0 typedef unsigned int u16; //對(duì)數(shù)據(jù)類型進(jìn)行聲明定義 typedef unsigned char u8; u8 i=0,k=0,j=0,T; sbit led=P2^5; sbit anjian=P3^2; u8 code smgduan[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//顯示0~F的值 void delay1ms() //誤差 0us { unsigned char a,b,c; for(c=1;c>0;c--) for(b=142;b>0;b--) for(a=2;a>0;a--); } void display() { led=0; while(j<16) { P0=smgduan[j]; delay1ms(); if(i==15) { i=0; j++; } } // delay1ms(); } void kk() { if(anjian==0) { delay1ms(); if(anjian==0) { TR0=!TR0; while(anjian==0) display(); } } } void zhongduan() { TMOD=0x01; TH0=0x3c; TL0=0xb0; //定時(shí)50ms //設(shè)置INT0 // IT0=1;//跳變沿出發(fā)方式(下降沿) // EX0=1;//打開(kāi)INT0的中斷允許。 //設(shè)置INT1 TR1=1; ET1=1; EA=1;//打開(kāi)總中斷 } /* void Int0() interrupt 0 //外部中斷0的中斷函數(shù) { delay1ms(); //延時(shí)消抖 while(1) { kk(); } } */ void main() { zhongduan(); P0=smgduan[0]; while(1) { // display(); kk(); } } void timer_0() interrupt 1 //定時(shí)器中斷函數(shù) { TH0=0x3c; TL0=0xb0; //定時(shí)50ms k++; if(k==20) { i++; k=0; } } |
| 這種網(wǎng)上找一個(gè)數(shù)碼管顯示和中斷式例自己改,一般沒(méi)人幫你一下寫(xiě)好,不過(guò)可以幫忙修改錯(cuò)誤。 |
| 不要發(fā)求程序的帖子,根據(jù)經(jīng)驗(yàn),一般不會(huì)有人回答 |
Powered by 單片機(jī)教程網(wǎng)