国产第页,国产精品视频一区二区三区,国产精品网站夜色,久久艹影院,精品国产第一页,欧美影视一区二区三区,国产在线欧美日韩精品一区二区

此程序?qū)崿F(xiàn)計時秒表功能,時鐘顯示范圍0000~999秒,分辨度秒

發(fā)布時間:2020-10-04 來源: 事跡材料 點擊:

 //此程序?qū)崿F(xiàn)計時秒表功能,時鐘顯示范圍 00.00~99.99 秒,分辨度:0.01 秒

 #include "p18f458.h"

 unsigned

 char

 s[4];

  //定義 0.01 秒、0.1 秒、1 秒、10 秒計時器 unsigned

 char

 k,data,sreg; unsigned

 int i; const table[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0XD8,0x80,0x90};

  //不帶小數(shù)點的顯示段碼表 const table0[10]={0X40,0X79,0X24,0X30,0X19,0X12,0X02,0X78,0X00,0X10};

  //帶小數(shù)點的顯示段碼表

 void clkint(void);

 //TMR0 初始化子程序 void tmint() {

 T0CON=0XCF;

 //設(shè)定TMR0L 工作于8 位定時器方式

 //內(nèi)部時鐘,TMR0 不用分頻

 INTCON=0X20;

  //總中斷禁止,TMR0 中斷允許,清除TMR0 的中斷標志

 0IP=1;

 //TMR0 中斷高優(yōu)先級

 =1;

  //使能中斷優(yōu)先級 }

 //系統(tǒng)其它部分初始化子程序 void initial() {

 TRISA=0x00;

 //A 口設(shè)置為輸出

 TRISB=0XF0;

 //RB1 輸出,RB4 輸入

 TRISC=0x00;

 //SDO 引腳為輸出,SCK 引腳為輸出

 TRISE=0x00;

 //E 口設(shè)置為輸出

 SSPCON1=0x30;

  //SSPEN=1;CKP=1,F(xiàn)OSC/4

 SSPSTAT=0xC0;

  //時鐘下降沿發(fā)送數(shù)據(jù)

 PIR1=0;

  //清除 SSPIF 標志

 data=0X00;

 //待顯示的寄存器賦初值

 1=0;

 3=0;

 PORTE=0;

 //將 K1,K2,K3,K4 四條列線置 0

 }

 //SPI 傳輸數(shù)據(jù)子程序 void

  SPILED(char data) {

 SSPBUF=data;

 //啟動發(fā)送

 do

 {

 ;

 }while(==0);

 =0; }

 //顯示子程序,顯示 4 位數(shù) void dispaly() {

 5=0;

  //準備鎖存

 for(k=0;k<4;k++)

 {

  data=s[k];

  if(k==2) data=table0[data];

 //個位需要顯示小數(shù)點

  else data=table[data];

  SPILED(data);

  //發(fā)送顯示段碼

 }

 for(k=0;k<4;k++)

 {

  data=0xFF;

  SPILED(data);

  //連續(xù)發(fā)送4 個DARK,使顯示好看一些

 }

 5=1;

  //最后給鎖存信號,代表顯示任務(wù)完成 }

 //軟件延時子程序 void

 DELAY() {

 for(i = 3553; --i ;)

 continue; }

  //鍵掃描子程序 void KEYSCAN() {

 while(1)

 {

  dispaly();

  //調(diào)用一次顯示子程序

  while(4==0)

 {

 DELAY();

  //若有鍵按下,則軟件延時

  break;

  }

  if (4==0) break;

 //若還有鍵按下,則終止循環(huán)掃描,返回

  } }

 //等鍵松開子程序 void keyrelax() {

 while(1)

 {

  dispaly();

  //調(diào)用一次顯示子程序

  if (4==1) break;

 //為防止按鍵過于靈敏,每次等鍵松開才返回

 }

  }

 /*高優(yōu)先級中斷向量*/ #pragma code InterruptVectorHigh=0x08 void InterruptVectorHigh (void) {

  _asm

  goto clkint

  //跳到中斷程序

  _endasm }

 //中斷服務(wù)程序 #pragma code #pragma interrupt clkint

 void clkint() {

 TMR0=0X13;

  //對TMR0 寫入一個調(diào)整值。因為寫入TMR0 后接著的

  //兩個周期不能增量,中斷需要 3 個周期的響應(yīng)時間,

  //以及 C 語言自動進行現(xiàn)場保護要消耗周期

 INTCONbits.T0IF=0;

 //清除中斷標志

 sreg=sreg+1;

  //中斷計數(shù)器加1

 if(sreg==40)

  //中斷次數(shù)為 40 后,才對 S0,S1,S2,S3 操作

 {

  sreg=0;

  s[0]=s[0]+1;

  if(s[0]==10)

  {

 s[0]=0 ;

 s[1]=s[1]+1;

 if(s[1]==10)

 {

  s[1]=0 ;

  s[2]=s[2]+1;

  if(s[2]==10)

  {

 s[2]=0;

 s[3]=s[3]+1;

 if(s[3]==10) s[3]=0;

  }

 }

  }

 } }

 //主程序 main() {

 tmint();

  //TMR0 初始化

 initial();

  //spi 顯示初始化及系統(tǒng)其它部分初始化

 =0;

  //總中斷禁止

 while(1)

 {

 for(k=0;k<4;k++)

  {

 s[k]=0;

  }

  sreg=0;

 //賦顯示初值

  dispaly();

 //調(diào)用一次顯示子程序

  KEYSCAN();

  //鍵掃描,直到開始鍵按下

  keyrelax();

  //等鍵松開

  =1;

 //總中斷允許

  KEYSCAN();

  //鍵掃描直到停止鍵按下,在鍵掃描時有顯示

  keyrelax();

  //等鍵松開

  =0;

 //總中斷禁止

  KEYSCAN();

  //鍵掃描到清 0 鍵按下,在鍵掃描時有顯示

 keyrelax();

  //等鍵松開

 } }

相關(guān)熱詞搜索:秒表 計時 時鐘

版權(quán)所有 蒲公英文摘 www.huhawan.com