標題:
單片機代碼尋求注釋,新學看不懂,求指教
[打印本頁]
作者:
51小黑子
時間:
2022-11-18 15:42
標題:
單片機代碼尋求注釋,新學看不懂,求指教
#include<reg51.h>
unsigned charnum[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//定義一個數(shù)組,來表示數(shù)碼管對應的數(shù)字
unsigned charhour=12,minute=0,second=0;a=0;
int time=8000; //定義定時時間
void clockl()interrupt 1 //中斷處理程序
{
static unsigned char i=0;
TH0=(65536-time)/256; //重新載入T0的初值
TL0=(65536-time)%256; //重新載入T0的初值
a++;
if(a==125) //如果進行了125次中斷
{
a=0;
second++;
if(second==60)
{
second=0;
minute++;
if(minute==60)
{
minute=0;
hour++;
if(hour==24)
hour=0;
}
}
}
switch(i)
{
case 0:P2=0x08;P0=num[hour/10];i++;break;
case 1:P2=0x09;P0=num[hour%10];i++;break;
case 2:P2=0x0a;P0=num[minute/10];i++;break;
case 3:P2=0x0b;P0=num[minute%10];i++;break;
case 4:P2=0x0c;P0=num[second/10];i++;break;
case 5:P2=0x0d;P0=num[second%10];i=0;break;
}
}
void main()
{
TMOD=0X01; //工作方式寄存器T1不工作處于模式0的狀態(tài)下T0工作處于模式1的狀態(tài)下
TH0=(65536-time)/256; //高八位的值 載入初值
TL0=(65536-time)%256; //低八位的值
TR0=1; //打開定時器的管腳
EA=1; // 把總開關閉合
ET0=1; //允許中斷發(fā)生 打開中斷T0
while(1); //兩個都打開允許輸出信號 等待中斷
}
復制代碼
作者:
51hei**1140
時間:
2022-11-18 20:12
定時器時鐘,先弄明白原理,然后逐句的去理解吧
作者:
啤酒瓶子老大
時間:
2022-11-20 01:04
void clockl()interrupt 1 //中斷處理程序
{
static unsigned char i=0; 創(chuàng)建一個靜態(tài)變量i
TH0=(65536-time)/256; //重新載入T0的初值 中斷的初始值
TL0=(65536-time)%256; //重新載入T0的初值
a++; a+1
if(a==125) //如果進行了125次中斷 如果a=125
{ 那么
a=0;
second++; 秒加1
if(second==60) 如果秒=60
{ 那么
second=0; 秒=0
minute++; 分+1
if(minute==60) 如果分=60
{ 那么
minute=0; 分=0
hour++; 小時+1
if(hour==24) 如果小時=24
hour=0; 那么小時=0
}
}
}
switch(i) 下面是刷新數(shù)碼管的6位。
{
case 0:P2=0x08;P0=num[hour/10];i++;break; 開始i=0運行這行給數(shù)碼管的斷碼引腳和位碼引腳送數(shù)據(jù),送完了i+1
case 1:P2=0x09;P0=num[hour%10];i++;break; 第二次運行到選擇的時候,i=1了,就運行這行
case 2:P2=0x0a;P0=num[minute/10];i++;break; 以下類推
case 3:P2=0x0b;P0=num[minute%10];i++;break;
case 4:P2=0x0c;P0=num[second/10];i++;break;
case 5:P2=0x0d;P0=num[second%10];i=0;break;
}
}
也不知道準確不準確,反正我是這么理解的。
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1