ZKX's LAB

单片机定时器 计数器的工作原理,及如何实现定时 计数功能 单片机设计按键控制定时器选播多段音乐

2020-08-12知识7

单片机用1个按键控制60秒定时,通过2个数码管显示。按一下启动,再按停止,求高手帮忙 KEYCARD BIT 00H;用于标志是否有键按下KEYCOU EQU 5AH;用于记录按下键的次数ORG 0000H;程序开始AJMP STARTORG 30H;为避免占用中断向量区,主程序从30H开始START:MOV SP,#5FH;设置堆栈的初始地址MOV P2,#0H;P2,P3的初始化MOV P3,#0FFHCLR KEYCARD;有按键标志清0MOV KEYCOU,#0;计数初值赋0LOOP:;循环扫描键盘ACALL KEY_CHECKJNB KEYCARD,DISPLAYINC KEYCOUDISPLAY:;显示程序MOV DPTR,#ASCII;获得对应的显示码PUSH BMOV A,KEYCOUMOV B,#0AHDIV AB;选显示第一位高位MOVC A,@A+DPTRMOV P0,A;把显示码传至A口SETB P2.1;选通P2.0,显示ACALL DELAY1SCLR P2.1MOV A,BPOP BMOVC A,@A+DPTRMOV P0,A;把显示码传至A口SETB P2.0;选通P2.0,显示ACALL DELAY1SCLR P2.0AJMP LOOPKEY_CHECK:;看有没有键按下MOV A,P3ANL A,#0fFH;逻辑与CJNE A,#0FFH,KEY_CER;如果读入的与写出的不相等,延时消抖CLR KEYCARDRETKEY_CER:;延时,再读入,看是否真的有键按下ACALL DELAY1SMOV A,P3ANL A,#0FFHCJNE A,#0FFH,KEY_CECLR KEYCARDRETKEY_CE:MOV A,P3;直等到按键放下,则算作一次ANL A,#0FFHCJNE A,#0FFH,KEY_CESETB KEYCARD;真的有键按下,。51单片机中,当一个按键按下去,定时器中的TR0=1,当松开按键,定时器中的TR0就一直为0? ORG 0000H LJMP MAIN ORG 0030H MAIN:CLR TR0 LOOP:JNB P1.0,MAIN SETB TR0 SJMP LOOP ENDc51单片机定时器30秒倒计时程序,一个按键控制开始,另一个按键控制暂停和继续 #includeunsigned char code ledtab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};0-9unsigned char sec=30,scanled;unsigned char disdat[2];sbit keys=P1^0;sbit keyc=P1^1;sbit fmq=P3^0;void delay(unsigned int x){unsigned int i,j;for(i=0;i;i+)for(j=0;j;j+);}void dischg(){disdat[0]=sec/10;disdat[1]=sec%10;}void t0isr()interrupt 1/秒计时{TH0=0x3c;TL0=0xb0;time+;if(time=20){time=0;if(sec>;0&flag=0)sec-;}dischg();}void t1isr()interrupt 3/显示{TH1=0xec;TL1=0x78;switch(scanled){case 0:P2=0xfe;P0=ledtab[disdat[1]];break;case 1:P2=0xfd;P0=ledtab[disdat[0]];break;default:break;}scanled+;scanled%2;}main(){TMOD=0x11;TH0=0x3c;TL0=0xb0;TH1=0xec;TL1=0x78;TR1=1;TR0=0;ET0=1;ET1=1;EA=1;fmq=0;scanled=0;while(1){if(keys=0){while(keys=0);TR0=1;}if(keyc=0){while(keyc=0);TR0=~TR0;}}}求单片机大神 写10s的秒表程序,用三个按键分别控制秒表启动、停止、清零(要求:使用定时器0定时, /*-数码管5261显示,按键4102控制秒表中断按键控制,数码管显示,中断0控制计时和停止,中断1清零include<;reg52.h>;/包含头1653文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义unsigned int second;定义全局变量bit GoFlag;定义停止,计时标志define DataPort P0/定义数据端口 程序中遇到DataPort 则用P0 替换sbit LATCH1=P2^2;定义锁存使能端口 段锁存sbit LATCH2=P2^3;位锁存unsigned char code dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};显示段码值0~9unsigned char codedofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};分别对应相应的数码管点亮,即位码unsigned char TempData[8];存储显示值的全局变量void DelayUs2x(unsigned char t);函数声明void DelayMs(unsigned char t);void Display(unsigned char FirstBit,unsigned char Num);void Init_Timer0(void);void CLR(void);主函数void main(void){unsigned char num=0;EX0=1;外部中断0开IT0=1;IT1=0表示边沿触发EX1=1;外部中断1开IT1=1;IT1=1表示边沿触发Init_Timer0();while(1)/主循环{TempData[0]=dofly_DuanMa[second/10];分解显示。怎么用单片机做定时开关? 先要会做一个时钟,时间更新在定时器中断程序中,然后主程序中不断比较当前时间与设置时间,决定输出是开是关,我整过简单的,需要了我可以发51单片机怎样用按键设定定时时间,我们在使用51单片机时,往往需要使用到定时计数器。有时候,因为一些特别的需求,需要对定时的时间进行设定,这时候可以通过外设例如按键。

随机阅读

qrcode
访问手机版