男女午夜激情_www.天堂av.com_亚洲综合小说区_亚洲欧美自拍视频_成年精品_久久www免费人成—看片_激情综合五月天_久久高潮视频_最新国产成人ab网站_国产精品卡一

機電之家資源網
單片機首頁|單片機基礎|單片機應用|單片機開發|單片機文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發
培訓信息
贊助商
基于PIC16F877A的秒表程序
基于PIC16F877A的秒表程序
 更新時間:2008-7-26 17:03:34  點擊數:3
【字體: 字體顏色
//該源程序已在實驗板上調試通過,讀者可直接引用,并可利用軟件編程的靈活性,加以拓展,實現更為復雜的功能。

//此程序實現計時秒表功能,時鐘顯示范圍00.00~99.99秒,分辨度:0.01秒

//定義0.01 秒、0.1 秒、1秒、10秒計時器
#include <pic.h>
#include  <math.h>
unsigned  char  s0,s1,s2,s3;
unsigned  char   s[4];
unsigned  char   k ,data ,sreg;
unsigned   int  i;
const table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0XD8,0x80,0x90};
//不帶小數點的顯示段碼表
const table0[10]={0X40,0X79,0X24,0X30,0X19,0X12,0X02,0X78,0X00,0X10};
//帶小數點的顯示段碼表
//TMR0初始化子程序
void  tmint()
{
 T0CS=0;    //TMR0工作于定時器方式
 PSA=1;     //TMR0不用分頻
 T0IF=0;     //清除TMR0的中斷標志
 T0IE=1;     //TMR0中斷允許
}
//spi顯示初始化子程序
void  SPIINIT()
{
 PIR1=0;
 SSPCON=0x30;
 SSPSTAT=0xC0;
//設置SPI的控制方式,允許SSP方式,并且時鐘下降沿發送。與"74HC595,當其
//SCLK從低到高跳變時,串行輸入寄存器"的特點相對應
 TRISC=0xD7;   //SDO引腳為輸出,SCK引腳為輸出
 TRISA5=0;    //RA5引腳置為輸出,輸出顯示鎖存信號
}
//系統其它部分初始化子程序
void  initial()
{
 TRISB1=0;
 TRISB2=0;
 TRISB4=1;
 TRISB5=1;    //設置與鍵盤有關的各口的輸入輸出方式
 RB1=0;
 RB2=0;     //建立鍵盤掃描的初始條件
}
//SPI傳輸數據子程序
void   SPILED(data)
{
 SSPBUF=data;   //啟動發送
 do {
     ;
  }while(SSPIF==0);
 SSPIF=0;
}
//顯示子程序,顯示4位數
void  dispaly()
{
 RA5=0;     //準備鎖存
 for(k=4;k>0;k--)
 {
  data=s[k-1];
  if(k==3) data=table0[data];//第二位需要顯示小數點
  else data=table[data];
  SPILED(data);  //發送顯示段碼
 }
 for(k=0;k<4;k++)
 {
  data=0xFF;
  SPILED(data);  //連續發送4個DARK,使顯示好看一些
 }
 RA5=1;     //最后給鎖存信號,代表顯示任務完成
}
//軟件延時子程序
void   DELAY()
{
 for(i = 3553; --i ;) continue;

//鍵掃描子程序
void  KEYSCAN()
{
while(1){ 
while(1)
 {
  dispaly();   //調用一次顯示子程序
  if ((RB5==0)||(RB4==0)) break;
 }
  DELAY();   //若有鍵按下,則軟件延時
  if ((RB5==0)||(RB4==0)) break;//若還有鍵按下,則終止循環掃描,返回
   }
}
//等鍵松開子程序
void  keyrelax()
{
while(1){
 dispaly();    //調用一次顯示子程序
 if ((RB5==1)&&(RB4==1)) break;
 }      //為防止按鍵過于靈敏,每次等鍵松開才返回
}
//系統賦值初始化子程序
void  inizhi()

 s0=0x00;
 s[0]=s0;
 s1=0x00;
 s[1]=s1;
 s2=0x00;
 s[2]=s2;
 s3=0x00;
 s[3]=s3;     //s0=s1=s2=s3=0,并放入顯示緩沖數組中
 sreg=0x00;    //tmr0中斷次數寄存器清0
}
//中斷服務程序
void  interrupt clkint(void)
{
 TMR0=0X13;   //對TMR0寫入一個調整值。因為寫入TMR0后接著的
 //兩個周期不能增量,中斷需要3個周期的響應時間,
 //以及C語言自動進行現場保護要消耗周期
 T0IF=0;     //清除中斷標志
 CLRWDT();
 sreg=sreg+1;    //中斷計數器加1
 if(sreg==40)    //中斷次數為40后,才對S0,S1,S2,S3 操作
 {
  sreg=0;
  s0=s0+1;
  if(s0==10){
   s0=0 ;
   s1=s1+1;
   if(s1==10){
    s1=0 ;
    s2=s2+1;
    if(s2==10){
     s2=0;
     s3=s3+1;
     if(s3==10) s3=0 ;
    }
   }
  }
 }
 s[0]=s0;
 s[1]=s1;
 s[2]=s2;
 s[3]=s3;
}
//主程序
main()
{
 OPTION=0XFF;
 tmint();     //TMR0初始化
 SPIINIT();    //spi顯示初始化
 initial();     //系統其它部分初始化
 di();     //總中斷禁止
 while(1) { 
  inizhi();    //系統賦值初始化
  KEYSCAN();  //鍵掃描,直到開始鍵按下
  keyrelax();   //等鍵松開
  ei();    //總中斷允許
  TMR0=0X08;
 KEYSCAN();  //鍵掃描直到停止鍵按下,在鍵掃描時有顯示
  keyrelax() ;   //等鍵松開
  di();    //總中斷禁止
  KEYSCAN();  //鍵掃描到清0鍵按下,在鍵掃描時有顯示 
  keyrelax() ;   //等鍵松開
 }
}

  • 上一篇: 基于PIC16F72的兩路交流信號AD轉換(C程序)
  • 下一篇: 基于PIC16F877A的簡易數字頻率計
  • 發表評論   告訴好友   打印此文  收藏此頁  關閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關文章
    網友評論:(只顯示最新5條。)
    關于我們 | 聯系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機電之家 | 會員助手 | 免費鏈接

    點擊這里給我發消息66821730(技術支持)點擊這里給我發消息66821730(廣告投放) 點擊這里給我發消息41031197(編輯) 點擊這里給我發消息58733127(審核)
    本站提供的機電設備,機電供求等信息由機電企業自行提供,該企業負責信息內容的真實性、準確性和合法性。
    機電之家對此不承擔任何保證責任,有侵犯您利益的地方請聯系機電之家,機電之家將及時作出處理。
    Copyright 2007 機電之家 Inc All Rights Reserved.機電之家-由機電一體化網更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術支持

    主辦:杭州市高新區(濱江)機電一體化學會
    中國行業電子商務100強網站

    網站經營許可證:浙B2-20080178-1
    主站蜘蛛池模板: 武夷山市| 舒兰市| 河源市| 上栗县| 晋城| 辽中县| 共和县| 九江县| 上犹县| 车险| 宁都县| 江都市| 承德县| 丽江市| 临夏县| 象州县| 大田县| 三都| 合肥市| 沙雅县| 赤壁市| 冷水江市| 社会| 延吉市| 合江县| 凤凰县| 泌阳县| 庆云县| 遂平县| 无为县| 淮安市| 苍南县| 德清县| 巍山| 蕉岭县| 巴青县| 康保县| 嫩江县| 龙川县| 象山县| 台南市|