當前位置:編程學習大全網 - 編程語言 - 51單片機按鍵分別控制數碼管顯示精度為秒,十分秒,百分秒的秒表程序

51單片機按鍵分別控制數碼管顯示精度為秒,十分秒,百分秒的秒表程序

//用51單片機設計3位led數碼顯示管作秒表

#include "STC12C54.H"

#define uchar unsigned char

#define uint unsigned int

#define dataport P1//P1直接驅動數碼管的8個陽極

sbit wei1=P3^3;//再有三個管腳接3個三極管驅動數碼管的陰極

sbit wei2=P3^4;

sbit wei3=P3^5;

sbit key1=P2^0;//根據單片機型號自行定義,有的51單片機無此管腳

sbit key2=P2^1;

uint a=0;//中斷次數計數,壹次10ms,100次為1 秒

//***陰數碼管七段碼

uchar TABLE[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

//延時子程序

void delay1ms(uint t)

{

uint i,j,k;

for(i=t;i>0;i--)

for(j=15;j>0;j--)

for(k=27;k>0;k--);

}

//顯示子程序

void display(uint n)

{

uchar a1,a2,a3;

a1=n/100%10;

a2=n/10%10;

a3=n%10;

wei1=1;

dataport=0x80|TABLE[a1];//這裏有個小數點

delay1ms(1);

wei1=0;

wei2=1;

dataport=TABLE[a2];

delay1ms(1);

wei2=0;

wei3=1;

dataport=TABLE[a3];

delay1ms(1);

wei3=0;

}

void init(void)

{

TMOD=0X01;

TH0=(655536-10000)/256;//定時10ms

TL0=(655536-10000)%256;

EA=1;

ET0=1;

TR0=1;

P1M0=0;

P1M1=0xff;//P1口設為推挽輸出,驅動能力強

//普通51單片機沒有這類寄存器,去掉這些語句,為保證數碼管亮度

P1要加驅動放大電路,P3口所接三極管放大倍數要大壹些

P3M0=0;

P3M1=0x38;//P3.3P3.4 P3.5口設為推挽輸出

}

void main(void)//主程序

{

init();//初始狀態設定

while(1)

{

if(key1==0)

{

dela1ms(20);

if(key1==0) TR0=0;

.}

if(key2==0)

{

dela1ms(20);

if(key2==0) TR0=0;

.}

display(a);//顯示計數值,以百分之壹秒為單位

}

}

void timer0(void)interrupt 1//中斷子程序

{

TH0=(655536-10000)/256;

TL0=(655536-10000)%256;

a++;

if(a==1000)a=0;//1000次是10秒

}

  • 上一篇:北京電腦培訓分享學大數據需要學什麽語言
  • 下一篇:黑客、黑客、白客、紅黑客、藍黑客有什麽區別?紅藍客這個詞似乎沒有存在的必要!
  • copyright 2024編程學習大全網