缘由单片机倒计时程序 求指导 - 24小时必答区

学习单片机首先就要学好写显示驱动:数码管/LCD/点阵的驱动,这是人机交互的窗口,显示写好后其它都借助显示都容易了。
1. 倒计时秒表
    系统接1个按键用于启动,1个蜂鸣器用于提示计时时间到,两个数码管用于显示时间。
    功能:系统上电数码管显示60;当按键按下时,系统开始倒计时,同时数码管显示当前时间;当计时为0时,蜂鸣器响。
如果用中断函数具体该怎么弄呢?
#include <reg52.h>
unsigned char code ShuMaGuan[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00,0X80,118,121,56,63};//0~9隐.HELO
unsigned char Js=0;
sbit fm=P3^4;
sbit k1=P3^0;
void smgxs(unsigned char w,unsigned char sz)
{
	P2=P1=0;//写数码管段消隐,位关闭。
	P2=255-w;//写2位数码管动态位驱动
	P1=ShuMaGuan[w==1?sz/10:w==2?sz%10:10];//写数码管段驱动,并拆分整数送相应位。
}
void DSZZ()
{
	TH0=(65536-9216)/256;
	TL0=(65536-9216)%256;
}
void Timer0() interrupt  1                
{
	++Js;
	DSZZ();
}
void main()
{//缘由http://www.51hei.com/bbs/dpj-229379-1.html
	unsigned char w=0,ys=0,sy=0,my=0,sz=60,xd=0;
	bit k=0,kk=1;
	TMOD=0X01;
	DSZZ();
	TR0=ET0=EA=1;
	while(1)
	{
		if(++my>30){if(k&&kk)fm=~fm;my=0;}//第一步调试蜂鸣器频率
		if(++sy==0)//第二步写数码管显示延时
		{
			if(!w)w=1;else w*=2;
			smgxs(w,sz);
		}
		if(Js==100)
		{
			Js=0;
			if(k)kk=0;if(sz==0)k=1;else --sz;
		}//写数码管显示值步进和延时,并控制蜂鸣器。
		if(!k1&&++xd==0){sz=60;kk=1;k=0;while(!k1);}
	}
}

单片机时间片策略当然是有的,荔枝:数码管显示延时的时间片,由于写法不同,则时间片的利用也不同,
如使用if判断延时是这样的char ys=0;while(1){if(++ys==0){数码管显示}else 其他处理时间;}
如使用傻等式是这样的char ys=0;while(1){数码管显示;while(++ys==0);}那么只有傻傻等呆空循环完成后才能作其他事情;
而上面用判断的则不然,只要判断延时还没到的这段时间就可以执行其他事件,这就是2种不同思路产生不同结果

那么可以把上面的并列轮询修改为

void main()
{//缘由http://www.51hei.com/bbs/dpj-229379-1.html
	unsigned char w=0,ys=0,sy=0,my=0,sz=60,xd=0;
	bit k=0,kk=1;
	TMOD=0X01;
	DSZZ();
	TR0=ET0=EA=1;
	while(1)
	{
		if(++sy==0)//第一步写数码管显示延时
		{
			if(!w)w=1;else w*=2;
			smgxs(w,sz);//写数码管显示
		}
        else if(++my>47){if(k&&kk)fm=~fm;my=0;}//第二步调试蜂鸣器频率时间片小于数码管延时
		if(Js==100)//第三步写并列定时器秒计时
		{
			Js=0;//写数码管显示值步进和延时
			if(k)kk=0;if(sz==0)k=1;else --sz;//控制蜂鸣器
		}
		if(!k1&&++xd==0){sz=60;kk=1;k=0;while(!k1);}//第四步安排并列按键任务
	}
}

爾時,善現便白佛言:「如是般若波羅蜜多最極甚深,諸菩薩摩訶
薩能為難事,不得有情,亦復不得有情施設,而為有情求趣無上正
等菩提。譬如有人,空中種樹,甚為難事!諸菩薩摩訶薩亦復如
是,不得有情及彼施設,而為有情求趣無上正等菩提,極為難
事!」
佛告善現:「如是!如是!如汝所說。如是般若波羅蜜多最極甚
深,諸菩薩摩訶薩能為難事,不得有情,亦復不得有情施設,而為
有情求趣無上正等菩提。善現當知!諸菩薩摩訶薩雖不見有真實有
情及彼施設,而諸有情愚癡顛倒執為實有,沈淪生死受苦無窮,為
拔彼故,求趣無上正等菩提,得菩提已方便善巧而度脫之。
「譬如有人良田種樹,是人雖復不識此樹根莖、枝葉、花果、受
者,而種樹已隨時溉灌勤加守護。此樹後時漸得生長,根莖、枝
葉、花果茂盛,眾人受用愈疾獲安。諸菩薩摩訶薩亦復如是,雖不
見有佛果、有情,而為有情求趣無上正等菩提,漸次修行六到彼岸
及餘無量菩提分法,既圓滿已,證得無上正等菩提,令諸有情受用
佛樹枝葉花果各得饒益。
「善現當知!枝葉饒益,謂諸有情依此佛樹脫惡趣苦;其花饒益,
謂諸有情依此佛樹,或生剎帝利大族,乃至或生居士大族,或生四
大王眾天,乃至或生非想非非想處天。其果饒益,謂諸有情依此佛
樹,或證預流果乃至或證獨覺菩提,或證無上正等菩提。是諸有情
得菩提已,復用佛樹枝葉花果饒益有情,令諸有情脫惡趣苦得人、
天樂,漸次安立令入三乘般涅槃界。
「善現當知!諸菩薩摩訶薩雖作如是大饒益事,而都不見有實有情
得涅槃者,但見妄想眾苦寂滅。如是,善現!諸菩薩摩訶薩行深般
若波羅蜜多,不得有情及彼施設,然為除彼妄想顛倒,求趣無上正
等菩提,由此因緣極為難事。」具壽善現復白佛言:「諸菩薩摩訶
薩當知如佛。所以者何?依諸菩薩摩訶薩故,便能永斷一切地獄、
傍生、鬼界,亦能永斷一切無暇貧窮劣趣三界眾苦。」
佛告善現:「如是!如是!如汝所說。諸菩薩摩訶薩應知如佛。世
間若無諸菩薩眾發趣無上正等菩提,則無十方三世諸佛,亦無獨覺
及諸聲聞,亦無有能永斷地獄、傍生、鬼界及餘無暇貧窮劣趣三界
苦者。是故,善現!如汝所說,諸菩薩摩訶薩當知如佛。
「復次,善現當知!菩薩摩訶薩眾即是如來、應、正等覺。所以者
何?若由此真如施設如來、應、正等覺,即由此真如施設獨覺;若
由此真如施設獨覺,即由此真如施設聲聞;若由此真如施設聲聞,
即由此真如施設一切賢聖;若由此真如施設一切賢聖,即由此真如
施設色蘊;若由此真如施設色蘊,即由此真如施設受、想、行、識
蘊;若由此真如施設受、想、行、識蘊,即由此真如施設眼處;若
由此真如施設眼處,即由此真如施設耳、鼻、舌、身、意處;如是
展轉廣說乃至若由此真如施設諸佛無上正等菩提,即由此真如施設
一切智智;若由此真如施設一切智智,即由此真如施設有為界;若
由此真如施設有為界,即由此真如施設無為界;若由此真如施設無
為界,即由此真如施設一切法;若由此真如施設一切法,即由此真
如施設一切有情;若由此真如施設一切有情,即由此真如施設一切
菩薩摩訶薩。如是,善現!若如來真如,若獨覺真如,若聲聞真
如,若一切賢聖真如,若色等一切法真如,若有情真如,若菩薩摩
訶薩真如,如是真如實皆無異,由無異故說名真如。諸菩薩摩訶
薩,於此真如修學圓滿,證得無上正等菩提,故名如來、應、正等
覺。是故,善現當知!菩薩摩訶薩眾即是如來、應、正等覺,以一
切法、一切有情皆以真如為定量故。
「如是,善現!諸菩薩摩訶薩應學真如甚深般若波羅蜜多,若學真
如甚深般若波羅蜜多即能學一切法真如,若能學一切法真如則能圓
滿一切法真如,若能圓滿一切法真如則於一切法真如得自在,若於
一切法真如得自在則能善知一切有情根性勝劣,若能善知一切有情
根性勝劣則能審知一切有情勝解差別,若能審知一切有情勝解差別
則知一切有情自業受果,若知一切有情自業受果則願智圓滿,若願
智圓滿則能淨修三世妙智,若能淨修三世妙智則能圓滿一切智智,
若能圓滿一切智智則能無倒行菩薩行,若能無倒行菩薩行則能成熟
有情,若能成熟有情則能嚴淨佛土,若能嚴淨佛土則能證得所求無
上正等菩提,若能證得所求無上正等菩提則能如實轉妙法輪,若能
如實轉妙法輪則能無倒安立有情於三乘道,若能無倒安立有情於三
乘道則令有情入無餘依般涅槃界。如是,善現!諸菩薩摩訶薩見如
是等自利利他一切功德,應發無上正等覺心,勇猛正勤行深般若波
羅蜜多堅固無退。」具壽善現便白佛言:「若菩薩摩訶薩為欲饒益
諸有情故,能發無上正等覺心,如說修行甚深般若波羅蜜多,世間
天、人、阿素洛等皆應禮敬。」
佛言:「善現!如是!如是!如汝所說。若菩薩摩訶薩為欲饒益諸
有情故,能發無上正等覺心,如說修行甚深般若波羅蜜多,世間
天、人、阿素洛等皆應禮敬。」

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐