|
多功能秒表仿真和程序
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.gif (103.25 KB, 下載次數(shù): 32)
下載附件
2023-1-2 17:19 上傳
單片機(jī)源程序如下:
- #include<reg51.h>
- #define uint unsigned int
- #define uchar unsigned char
- sbit dula=P2^5;
- sbit w1=P2^0;
- sbit w2=P2^1;
- sbit s2=P3^3;
- sbit s3=P3^4;
- sbit s4=P3^5;
- sbit s5=P3^6;
- sbit s6=P3^7;
- sbit buzz=P1^0;
- uchar N=00; //定義時(shí)間,可自由更改為0-99;
- uchar miao;
- bit flag=0;
- unsigned int pp;
- uchar j,k;
- uchar nn=0;
- unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
- 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};
- void delay(unsigned char i)
- {
- for(j=i;j>0;j--)
- for(k=125;k>0;k--);
- }
- void display(uchar n)
- {
- uchar c,d;
- c=n/10;
- d=n%10;
- P0=0x00;
- dula=0;
- P0=table[c];
- dula=1;
- w1=0,w2=1;
- delay(5);
- P0=0x00;
- dula=0;
- P0=table[d];
- dula=1;
- w2=0,w1=1;
- delay(5);
- }
- void scankeys()
- {
-
- if(s2==0 && TR0==0) //--
- {
- delay(5);
- if(s2==0)
- {
- if(N>0)
- N--;
- miao=N;
- }
- while(!s2);
- }
- if(s3==0&& TR0==0) //++
- {
- delay(5);
- if(s3==0)
- {
- if(N<100)
- N++;
- miao=N;
- }
- while(!s3);
- }
- if(s4==0)
- {
- TR0=1; //啟動(dòng)
- }
- if(s5==0)
- {
- TR0=0; //暫停
- }
- if(s6==0)
- {
- TR0=1,miao=N=0,pp=0; //清零
- }
- }
- void main()
- {
- TMOD=0x01;
- TH0=(65536-46080)/256;// 由于晶振為11.0592,故所記次數(shù)應(yīng)為46080,計(jì)時(shí)器每隔50000微秒發(fā)起一次中斷。
- TL0=(65536-46080)%256;//46080的來(lái)歷,為50000*11.0592/12
- ET0=1; // 開(kāi)定時(shí)器0中斷
- TR0=0;
- EA=1;
- miao=N;
- while(1)
- {
- display(miao);
- scankeys();
- if(miao==99)
- {
- buzz=0;
- }
- else
- {
- buzz=1;
- }
- }
- }
- void time0() interrupt 1
- { TH0=(65536-46080)/256;// 由于晶振為11.0592,故所記次數(shù)應(yīng)為46080,計(jì)時(shí)器每隔50000微秒發(fā)起一次中斷。
- TL0=(65536-46080)%256;//46080的來(lái)歷,為50000*11.0592/12
- pp++;
- if(pp==20)
- {
- pp=0;
- if(miao<99)
- miao++;
-
- }
- }
復(fù)制代碼 Keil代碼與Proteus仿真下載:
秒表2位共陰數(shù)碼管.zip
(96.77 KB, 下載次數(shù): 30)
2022-12-29 22:01 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|