龙空技术网

单片机入门-C51语言用按键中断和查询两种方法调整电子钟参数解说

灵思致远IT学苑 265

前言:

现时姐妹们对“c语言电子钟”大体比较关切,朋友们都需要剖析一些“c语言电子钟”的相关文章。那么小编也在网上搜集了一些有关“c语言电子钟””的相关内容,希望姐妹们能喜欢,兄弟们一起来学习一下吧!

单片机入门-C51语言用按键中断和查询两种方法调整电子钟参数解说视频:

视频教程

传统的单片机中断5个。包括两个外部中断(int0,int1),2个定时中断t1,t0,和一个串口中断(uart)。中断具有简单直观、易于控制。

优点:

响应快、电平和时钟触发中断、计数中断、定时中断、来自串口数据中断、睡眠中断唤醒模式中断。

缺点:

只能采用单任务机制,程序只能按顺序依次执行,缺乏灵活性,只能使用中断函数实时地处理一些较短的任务,在较复杂的应用中使用极为不便。

按键控制有查询和中断两种方式,中断必须借助中断引脚,而查询按键可用任何IO端口。按键较少时,一个按键占用一个IO口,而按键数量较多时,多采用矩阵形式,如常用,4个端口作为输出、4个端口作为输入的4*4矩阵来获得16个按键。

按键控制用查询方法步骤:

设计好按键电路;声明按键对应的IO管脚变量,如sbit KEY=P1^6;用if语句判断是否按键按下,如if(KEY==0);延时消除抖动。

按键控制用外部中断方法步骤:

1.设计好按键电路;

2.设置外部中断用触发方式IT0/IT1

3.使能外部中断EX0/EX1

4.使能总中断EA

5.中断函数程序的编写

本文用到的电路图如下:

本文用到的代码如下:

#include "lcd12864.h"

unsigned char count=0;

unsigned char hour=15,minute=59,second=34;

unsigned char CLOCK[]="15:59:34";

unsigned char keyNum=0;

sbit KEY_ADD=P1^6;

sbit KEY_SUB=P1^7;

void int0() interrupt 0 //处理功能选择的按键中断请求

{

keyNum++;

if(keyNum>3)

{

keyNum=0;

}

}

void timer0() interrupt 1

{

TH0=0x3c;//T0 15536-->65536 =50ms

TL0=0xb0;

count++;

if(count==20)//1S

{

count=0;

second++;

if(second==60)

{

second=0;

minute++;

if(minute==60)

{

minute=0;

hour++;

if(hour==24)

{

hour=0;

}

}

}

}

}

void mydelay(unsigned int k)

{

unsigned char i;

unsigned int j;

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

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

}

void main()

{

lcd_init();

lcd_clr();

IT0=1;

EX0=1; //按键1 外部中断0

TMOD=0x01;

TH0=0x3c;//T0 15536-->65536 =50ms

TL0=0xb0;

ET0=1;//T0

EA=1;

TR0=1;//启动定时器

printchars(5,0,"Clock",0);

while(1)

{

CLOCK[0]=hour/10+0x30;

CLOCK[1]=hour%10+0x30;

CLOCK[3]=minute/10+0x30;

CLOCK[4]=minute%10+0x30;

CLOCK[6]=second/10+0x30;

CLOCK[7]=second%10+0x30;

printchars(4,2,CLOCK,0);

{

if(keyNum==1)

{

ds(0,4,'H',0);

}

if(keyNum==2)

{

ds(0,4,'M',0);

}

if(keyNum==3)

{

ds(0,4,'S',0);

}

TR0=0;

switch(keyNum)

{

case 0:break;

case 1:

{

if(KEY_ADD==0)//用户按下加1按键

{

if(hour<23)hour++;else hour=0;

}

if(KEY_SUB==0)//用户按下减1按键

{

if(hour>0)hour--;else hour=23;

}

mydelay(1000);

break;

}

case 2:

{

if(KEY_ADD==0)//用户按下加1按键

{

if(minute<59)minute++;else minute=0;

}

if(KEY_SUB==0)//用户按下减1按键

{

if(minute>0)minute--;else minute=59;

}

mydelay(1000);

break;

}

case 3:

{

if(KEY_ADD==0)//用户按下加1按键

{

if(hour<59)second++;else second=0;

}

if(KEY_SUB==0)//用户按下减1按键

{

if(hour>0)second--;else second=59;

}

mydelay(1000);

break;

}

}

TR0=1;

}

}

}

标签: #c语言电子钟