前言:
现时姐妹们对“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语言电子钟