日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

stm32倒计时秒表proteus_单片机倒计时秒表系统实验程序Proteus仿真

發(fā)布時間:2024/5/8 windows 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 stm32倒计时秒表proteus_单片机倒计时秒表系统实验程序Proteus仿真 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

#include

unsigned??char code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //共陰數(shù)碼管 0-9

sbit led=P3^0;

sbit s1=P0^0;

sbit s2=P0^1;

sbit k0=P2^0;

sbit k1=P2^1;

int sec=0,i,a,b=20,key1;

/*-----延遲函數(shù)-------*/

void delay(int z)

{

while(z-->0);

}

/*-----顯示函數(shù)-------*/

void display(int n)

{

if(n>0)

{

s2=1;s1=0;??? ? ? ? //顯示十位

P1=tab[n/10];??//除10,取十位數(shù)值

delay(100);? ? ? ?? ? //延遲顯示

s1=1;s2=0;? ? ? ?? ? //顯示個位

P1=tab[n%10];??//求余,取個位數(shù)值

delay(100);? ? ? ?? ? //延遲

}

else

{? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //當(dāng)輸入值小于0,顯示0

s2=1;s1=0;? ? ? ?? ???//顯示十位

P1=tab[0];? ? ? ?? ???//除10,取十位數(shù)值

delay(100);? ? ? ?? ???//延遲

s1=1;s2=0;? ?? ? ? ???//顯示個位

P1=tab[0];? ? ? ? ? ? ? ? //求余,取個位數(shù)值

delay(100);? ? ? ?? ???//延遲顯示

}

}

/*-----外部中斷0中斷服務(wù)函數(shù)----------*/

void RESET() interrupt? ? ? ? 0

{

sec=0;? ? ? ???//恢復(fù)初始值

b=20;? ? ? ???//恢復(fù)初始值

TR0=0;? ? ? ???//關(guān)閉定時器

}

/*-----外部中斷1中斷服務(wù)函數(shù)----------*/

void START() interrupt? ? ? ? 2

{

TR0=1;? ? ? ? //打開定時器

}

/*-----定時器T0服務(wù)函數(shù),計時功能----------*/

void timer0() interrupt 1

{

i--;? ?//50ms時間到

TH0=(65536-50000)/256;? ? ? ? //存放高8位,50ms

TL0=(65536-50000)%256; ? ? ? ???//存放低8位

if(i==0)

{

i=20;? ?? ?? ?? ?//1s計數(shù)

sec++;? ? ? ? ? ? ? ? ? ? ? ? //軟件計數(shù)1s

}

}

/*------鍵值掃描函數(shù)----------*/

void key()

{

k0=1;k1=1;? ? ? ?? ???? ? ? ? //讀按鍵

key1=P2;? ? ? ?? ?? ?? ?//將P2的值賦值給key1

key1=key1&0x03;? ? ? ? ? ? ? ? //屏蔽高6位,保留k0,k1的值

while(key1!=0x03)? ?//判斷是否有按鍵按下

{

delay(600);? ? ? ? ? ? ? ? ? ? ? ? //消抖動

key1=P2;

key1=key1&0X03;

while(key1!=0x03)? ? ? ???//當(dāng)有按鍵按下時

{

if(k0==0) b=b+1;? ?? ? ? ???//按下k0按鍵時,初始值加1

else b=b-1;? ? ? ? ? ? ? ? ? ? ? ???//按下k1按鍵時,初始值減1

k0=1;k1=1;? ? ? ? ? ? ? ?? ? //判斷按鍵是否抬起

key1=P2;? ? ? ? ? ? ? ?? ?//重新將P2的值賦值給key1

key1=key1&0x03;

while(key1!=0x03)??//判斷是否有按鍵按下

{

key1=P2;

key1=key1&0x03;

}

}

}

}

/*------主函數(shù)----------*/

void main()

{

TMOD=0X01;? ? ? ? ? ? ? ? ? ? ? ?? ? //設(shè)定定時器0工作,工作方式1

TH0=(65536-50000)/256;? ? ? ???//存放高8位,50ms

TL0=(65536-50000)%256; ? ? ? ? //存放低8位

IT0=1;IT1=1;? ? ? ? ? ? ? ???//外部中斷選擇下降沿觸發(fā)

IE=0X87;? ? ? ? ? ? ? ? ? ? ? ???//開啟INT0,INT1,T0

PX0=1;? ? ? ? ? ? ? ? ? ? ? ?? ???//設(shè)定INT0為高優(yōu)先級

led=1;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //初始燈熄滅

TR0=0;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //初始計數(shù)停止

i=2;

while(1)

{

a=b-sec;? ? ? ? ? ? ? ? ? ? ? ???//將增計時變?yōu)闇p計時

if(TR0==0)? ? ? ? ? ? ? ? ? ? ? ???//當(dāng)定時器關(guān)閉時開啟鍵值掃描

{key();}

display(a);? ? ? ? ? ? ? ? ? ? ? ???//顯示函數(shù)

if(a<=0)

{

led=0;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ???//當(dāng)減計時為0時,報警燈點亮

}

else

{

led=1;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //當(dāng)減計時不為0時,報警燈熄滅

}

}

}

總結(jié)

以上是生活随笔為你收集整理的stm32倒计时秒表proteus_单片机倒计时秒表系统实验程序Proteus仿真的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。