#include "at89x52.h" /* 含8051所有暫存器宣告 */
unsigned char bdata flag;
sbit ccw_flag=flag^3;
sbit sw3=P3^1;
char time=20;//此初始值要設否則delay太長時間
char j; /* 七段顯示器位址碼 */
char ccw_count=-1;//不寫-1,會從第2個開開始跳
unsigned char bcd[]={7,8,9,10}; /* 定義兩位數顯示值儲存緩衝區 */
char code P1table[]={1,2,4,8};
char code P2table[]={0xFF,0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xc0,0xf9,0xa4,0xb0};
// a b c d e f
void delay_1ms(unsigned int k)
{
unsigned int i,j;
for(i=0;i<=k;i++)
for(j=0;j<=110;j++)
;
}
void main() /* 主程式 */
{
IE=0x8A; /* 致能計時器0、1中斷 */
TMOD=0x11; /* T0:工作模式0,T1:工作模式1 */
TH0=(65536-5000)/256; /* 設定T0初值,每5ms中斷一次 */
TL0=(65536-5000)%256;
TH1=(65536-50000)/256; /* 設定T1初值,每50ms中斷一次 */
TL1=(65536-50000)%256;
TR0=1; /* 啟動計時器0 */
delay_1ms(2000);
TR1=1; /* 啟動計時器1 */
ccw_flag=1;
while(1) /* 等待計時器中斷 */
{
if(sw3==0){ccw_flag=~ccw_flag; delay_1ms(50);while(sw3!=1);delay_1ms(50);}
}
} /* main */
void T0_int(void) interrupt 1 /* T0中斷函數:顯示器動態掃描 */
{
TH0=(65536-5000)/256; /* 重設初值 */
TL0=(65536-5000)%256;
P1=P1table[j]; /* 輸出位址碼 */
P2=~P2table[ bcd[j] ]; /* 輸出所掃描位數的顯示資料 */
j++; /* 掃描下一位七段顯示器 */
if(j==4) /* 已掃描至最後一位數? */
j=0; /* 重新掃描第一位七段顯示器 */
} /* T0_int */
void T1_int(void) interrupt 3 /* T1中斷函數:延遲時間1秒 */
{
TH1=(65536-50000)/256; /* 重設初值 */
TL1=(65536-50000)%256;
time--;
if(time==0)
{ //* 已經過0.1秒? */
time=20; //* 重設i=20 *
if(ccw_flag)
{
ccw_count++;
if(ccw_count>11)
{
ccw_count=0;
}
}
else
{
ccw_count--;
if(ccw_count<0)
{
ccw_count=11;
}
}
if(ccw_count==0)
{
bcd[0]=1;
bcd[1]=0;
bcd[2]=0;
bcd[3]=0;
}
else if(ccw_count==1)
{
bcd[0]=0;
bcd[1]=1;
bcd[2]=0;
bcd[3]=0;
}
else if(ccw_count==2)
{
bcd[0]=0;
bcd[1]=0;
bcd[2]=1;
bcd[3]=0;
}
else if(ccw_count==3)
{
bcd[0]=0;
bcd[1]=0;
bcd[2]=0;
bcd[3]=1;
}
else if(ccw_count==4)
{
bcd[0]=0;
bcd[1]=0;
bcd[2]=0;
bcd[3]=2;
}
else if(ccw_count==5)
{
bcd[0]=0;
bcd[1]=0;
bcd[2]=0;
bcd[3]=3;
}
else if(ccw_count==6)
{
bcd[0]=0;
bcd[1]=0;
bcd[2]=0;
bcd[3]=4;
}
else if(ccw_count==7)
{
bcd[0]=0;
bcd[1]=0;
bcd[2]=4;
bcd[3]=0;
}
else if(ccw_count==8)
{
bcd[0]=0;
bcd[1]=4;
bcd[2]=0;
bcd[3]=0;
}
else if(ccw_count==9)
{
bcd[0]=4;
bcd[1]=0;
bcd[2]=0;
bcd[3]=0;
}
else if(ccw_count==10)
{
bcd[0]=5;
bcd[1]=0;
bcd[2]=0;
bcd[3]=0; }
else if(ccw_count==11)
{
bcd[0]=6;
bcd[1]=0;
bcd[2]=0;
bcd[3]=0;
}
}
} /* T1_int */
2020年6月14日 星期日
訂閱:
張貼留言 (Atom)
algorithm
#include <iostream> #include <string.h> using namespace std; int main(int argc, char** argv) { for(int j=2;j<=100;j++)//j...
-
本文旨在補充《 超圖解Arduino互動設計入門 》第18章「RFID無線識別裝置與問答遊戲製作」單元,書本採用的RFID讀卡機模組是採用9600bps, TTL序列通訊介面,RFID的通訊頻率為125KHz。這種模組的接線和程式都很簡單,每當感測到RFID卡,讀卡機就把...
-
setw [C++] 使cout印出格式對齊-setw 設定輸出的欄位長度 85138 0 C/C++ 最近在一些程式,需要用到命令提示字元模式來印出結果,有時候我們會像表格一樣要每一筆資料可能有兩到三個欄位,但這時候,印出時都會因為印出的文字或數字太長而使排版跑掉 但是在...
-
#include "reg51.h" main() { void delay(int); int i ,j; char seg[10]={0xc0,0xf9,0xa4,0xb0,0x99, 0x92,0x82,0xf8,0x80,0x9...
沒有留言:
張貼留言