- #include <stc12c5630ad.h>
- #include <intrins.h>
- sbit shuju=P1^7;
- sbit yiwei=P1^5;
- sbit shuchu=P1^6;
- sbit k1=P3^7;
- sbit k2=P1^0;
- sbit out=P1^2;
- unsigned char code smg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
- 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e
- };
- unsigned char code smg1[]={0x01,0x02,0x04,0x08,0x00};
- unsigned char a,b,c,d,f,ar,ae,ax,ac,acc,er;
- unsigned int e ;
- void smg595(unsigned char aa,unsigned char bb);
- unsigned char shu[7];
- unsigned long kahao;
- void ys(unsigned char c);
- void xs();//數碼管逐位掃描顯示,
- void ADdsh() ;
- void main()
- { EA=1; EX0=1;IT0=1;
-
- e=0; EX1=1; IT1=1;
- k1=k2=1; ax=0;
- ar=ac=acc=0; er=0; e=0;
- while(1)
- {
- //ys(100); //ADdsh();
-
- if(k1==0&&ax==0){er=0;ax=1;kahao=0;}
- if(k1==1&&ax==1){ax=0;}
-
- d= kahao%10000/1000;
- c= kahao%1000/100;
- b= kahao%1000%100/10;
- a= kahao%1000%100%10; //將 16 進制轉換成10進制 在數碼管顯示出來
- /* d= shu[0];
- c= shu[1];
- b= shu[2];
- a= shu[3]; //將 16 進制轉換成10進制 在數碼管顯示出來 */
- xs();
-
- }
- }
- void smg595(unsigned char aa,unsigned char bb) //595 顯示裝填數字 驅動
- {
- unsigned char a,b;
- shuju=0;yiwei=0;shuchu=0;
- for(a=0;a<8;a++)
- {
- shuju=aa>>7;
- aa<<=1;
-
- yiwei=1;
- _nop_();
- nop_();
- _nop_();
- _nop_();
- yiwei=0;
-
- }
- for(b=0;b<8;b++)
- {
- shuju=bb>>7;
- bb<<=1;
- yiwei=1;
- _nop_();
- nop_();
- _nop_();
- _nop_();
- yiwei=0;
-
-
- }
- _nop_();
-
- shuchu=1;
- _nop_();
- nop_();
- _nop_();
- _nop_();
- shuchu=0;
- }
- void xs() //數碼管逐位掃描顯示,
- {
- smg595(smg[a],smg1[0]); ys(10); smg595(smg[d],smg1[4]);
- smg595(smg[b],smg1[1]); ys(10); smg595(smg[d],smg1[4]);
- smg595(smg[c],smg1[2]); ys(10); smg595(smg[d],smg1[4]);
- smg595(smg[d],smg1[3]); ys(10); smg595(smg[d],smg1[4]);
- }
- void ys(unsigned char c) // 大概1MS的延時。,C為5時
- {
- unsigned char a,b ;
- for(a=c;a>0;a--)
- for(b=200;b>0;b--);
- }
- /*void ADdsh()
- {
- P1M0=0X02;P1M1=0X00; //設置P1,1 口為高阻態(tài)
- ADC_CONTR=0X81;// 7:ADC_POWER 6:SPEED1 5:SPEED0 4:ADC_FLAG 3:ADC_START 2:CHS2 1:CHS1 0:CHS0
- _nop_();
- nop_();
- _nop_();
- _nop_();
- ADC_CONTR=0X89;
- e=ADC_DATA*20;// ADC_DATA 是AD轉換結果高8位數據存儲,ADC_LOW2是 低兩位結果存儲
-
- // e=e/10;
- } */
- void zhongduan ()interrupt 0 // 中斷程序 關鍵字 interrupt后數字帶表優(yōu)先級 中斷0是0,定時器 1 是1 中斷1是2
- {
- er++; if(er>=2&&er<=25){ kahao<<=1; }; // shu[ac]<<=1; ar++; if(ar==4) {ar=0;ac++;};
-
-
- }
- void zhongduan1 ()interrupt 2 // 中斷程序 關鍵字 interrupt后數字帶表優(yōu)先級 中斷0是0,定時器 1 是1 中斷1是2
- {
- er++; if(er>=2&&er<=25){ kahao<<=1;kahao++; }; // shu[ac]<<=1;shu[ac]++; ar++; if(ar==4) {ar=0;ac++;};
-
-
- }
復制代碼 |