![]() |
發布時間: 2018-7-18 21:57
正文摘要:請問用這個圖編寫keil工程代碼,使用外部中斷和定時器知識,實現gif圖中的功能:按鍵第一次按下,數碼管數值自動每秒加一(按16進制從0加到F),加到F自動清零。用按鍵接到外部中斷0的引腳(P3^2),用外部中斷控制 ... |
laisinanshi 發表于 2018-7-21 15:18 誰幫我看看這有啥問題啊 |
#include"reg51.h" #define m P0 typedef unsigned int u16; //對數據類型進行聲明定義 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; //定時50ms //設置INT0 // IT0=1;//跳變沿出發方式(下降沿) // EX0=1;//打開INT0的中斷允許。 //設置INT1 TR1=1; ET1=1; EA=1;//打開總中斷 } /* void Int0() interrupt 0 //外部中斷0的中斷函數 { delay1ms(); //延時消抖 while(1) { kk(); } } */ void main() { zhongduan(); P0=smgduan[0]; while(1) { // display(); kk(); } } void timer_0() interrupt 1 //定時器中斷函數 { TH0=0x3c; TL0=0xb0; //定時50ms k++; if(k==20) { i++; k=0; } } |
#include"reg51.h" #define m P0 typedef unsigned int u16; //對數據類型進行聲明定義 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; //定時50ms //設置INT0 // IT0=1;//跳變沿出發方式(下降沿) // EX0=1;//打開INT0的中斷允許。 //設置INT1 TR1=1; ET1=1; EA=1;//打開總中斷 } /* void Int0() interrupt 0 //外部中斷0的中斷函數 { delay1ms(); //延時消抖 while(1) { kk(); } } */ void main() { zhongduan(); P0=smgduan[0]; while(1) { // display(); kk(); } } void timer_0() interrupt 1 //定時器中斷函數 { TH0=0x3c; TL0=0xb0; //定時50ms k++; if(k==20) { i++; k=0; } } |
這種網上找一個數碼管顯示和中斷式例自己改,一般沒人幫你一下寫好,不過可以幫忙修改錯誤。 |
不要發求程序的帖子,根據經驗,一般不會有人回答 |