www.日本精品,久久中文视频,中文字幕第一页在线播放,香蕉视频免费网站,老湿机一区午夜精品免费福利,91久久综合精品国产丝袜长腿,欧美日韩视频精品一区二区

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

發(fā)布時(shí)間:2020-10-04 來(lái)源: 事跡材料 點(diǎn)擊:

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

 #include "p18f458.h"

 unsigned

 char

 s[4];

  //定義 0.01 秒、0.1 秒、1 秒、10 秒計(jì)時(shí)器 unsigned

 char

 k,data,sreg; unsigned

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

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

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

 void clkint(void);

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

 T0CON=0XCF;

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

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

 INTCON=0X20;

  //總中斷禁止,TMR0 中斷允許,清除TMR0 的中斷標(biāo)志

 0IP=1;

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

 =1;

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

 //系統(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;

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

 PIR1=0;

  //清除 SSPIF 標(biāo)志

 data=0X00;

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

 1=0;

 3=0;

 PORTE=0;

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

 }

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

  SPILED(char data) {

 SSPBUF=data;

 //啟動(dòng)發(fā)送

 do

 {

 ;

 }while(==0);

 =0; }

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

 5=0;

  //準(zhǔn)備鎖存

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

 {

  data=s[k];

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

 //個(gè)位需要顯示小數(shù)點(diǎn)

  else data=table[data];

  SPILED(data);

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

 }

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

 {

  data=0xFF;

  SPILED(data);

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

 }

 5=1;

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

 //軟件延時(shí)子程序 void

 DELAY() {

 for(i = 3553; --i ;)

 continue; }

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

 while(1)

 {

  dispaly();

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

  while(4==0)

 {

 DELAY();

  //若有鍵按下,則軟件延時(shí)

  break;

  }

  if (4==0) break;

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

  } }

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

 while(1)

 {

  dispaly();

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

  if (4==1) break;

 //為防止按鍵過(guò)于靈敏,每次等鍵松開(kāi)才返回

 }

  }

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

  _asm

  goto clkint

  //跳到中斷程序

  _endasm }

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

 void clkint() {

 TMR0=0X13;

  //對(duì)TMR0 寫(xiě)入一個(gè)調(diào)整值。因?yàn)閷?xiě)入TMR0 后接著的

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

  //以及 C 語(yǔ)言自動(dòng)進(jìn)行現(xiàn)場(chǎng)保護(hù)要消耗周期

 INTCONbits.T0IF=0;

 //清除中斷標(biāo)志

 sreg=sreg+1;

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

 if(sreg==40)

  //中斷次數(shù)為 40 后,才對(duì) 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();

  //鍵掃描,直到開(kāi)始鍵按下

  keyrelax();

  //等鍵松開(kāi)

  =1;

 //總中斷允許

  KEYSCAN();

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

  keyrelax();

  //等鍵松開(kāi)

  =0;

 //總中斷禁止

  KEYSCAN();

  //鍵掃描到清 0 鍵按下,在鍵掃描時(shí)有顯示

 keyrelax();

  //等鍵松開(kāi)

 } }

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

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