/**1位數(shù)碼管上先顯示零,按下SW0鍵(外中斷1)蜂鳴器發(fā)出"答"的一聲,數(shù)碼管遞增加數(shù), 到9回零;按下SW1鍵(外中斷0)蜂鳴器發(fā)出"笛"的一聲,數(shù)碼管遞減減數(shù),到0回9,用外中 斷和定時(shí)器編程實(shí)現(xiàn)?***********/
#include"stc.h"/*包含STC單片機(jī)頭文件*/ #include"top51.h"/*包含TOP51開(kāi)發(fā)板頭文件*/ #include"delay.h"/*包含愛(ài)晶電子提供延時(shí)函數(shù)頭文件*/ //#include "buzzer.h"/*愛(ài)晶電子提供的蜂鳴器頭文件*/
sbit sw0=P3^3; sbit sw1=P3^2;
/*0-F共陰字形碼表*/ uchar code sz[17]={0x3f , 0x06 , 0x5b , 0x4f , 0x66 , 0x6d ,0x7d , 0x07 , 0x7f , 0x6f , 0x77 , 0x7c , 0x39 , 0x5e , 0x79 , 0x71 , 0x00};
uchar num,tt0,i;/*局部變量定義*/ void main()/*主函數(shù)*/ { top51_init();/*TOP51開(kāi)發(fā)板初始化*/ COL0=1;/*選中4位數(shù)碼管的最右邊一位,并使SW0-SW2可作為獨(dú)立按鍵使用*/
IT1=1;/*設(shè)定外部中斷觸發(fā)方式:IT1=0為低電平觸發(fā);IT1=1為下降沿觸發(fā)*/ IT0=1;/*設(shè)定外部中斷觸發(fā)方式:IT0=0為低電平觸發(fā);IT1=0為下降沿觸發(fā)*/ PX0=1;/*設(shè)定中斷0優(yōu)先級(jí)高優(yōu)先級(jí)*/ PX1=1;/*使能中斷1也為高優(yōu)先級(jí)*/ PT0=0;/*使能T0為低優(yōu)先級(jí)*/
TMOD=0X01;//置T0的工作模式01 TH0=(65536-50000)/256; TL0=(65536-50000)%256; EX0=1;//開(kāi)INT0禁止、允許位 EX1=1;//開(kāi)INT1禁止、允許位 ET0=1;//開(kāi)T0禁止、允許位 EA=1;//開(kāi)全局中斷 //TR0=1;
while(1) { if (SW0==0) { //TR0=1;//delay20ms(); while(sw1==1) { num++; if(num>9) num=0; } } if(sw1==0) { //TR0=1;//delay20ms(); while(sw0==1) { num--; if(num<1) num=9; } } P0=sz[num]; } }
void timer0_routine() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; tt0++; if(tt0==20) tt0=0; }
/*---高優(yōu)先級(jí)中斷服務(wù)程序---*/ void int1_routine() interrupt 2 { TR0=1; for(i=50;i>0;i--) { BZ=1;//蜂鳴器發(fā)出答的一聲桑? delay500us(); BZ=0; delay500us(); } }
/*---高優(yōu)先級(jí)中斷服務(wù)程序---*/ void init0_routine() interrupt 0 { TR0=1; for(i=50;i>0;i--) { BZ=1;//蜂鳴器發(fā)出嘀的一聲, delayms(1); BZ=0; delayms(1); } }
|