姓名:殷琦 日期:6 月 27 号
今日学习任务:中断、定时器的学习,以及课设的一部分。
今日任务完成情况:课设的40%。
今日开发中遇到的问题汇总:好多
今日未解决的问题:好多
今日开发收获:无
自我评价:一般
上课知识点:
1定时器
#include <reg51.h>
sbit wei = P2^7;
sbit duan = P2^6;
int time;
unsigned char table_duan[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void main()
{
int i = 0;
EA = 1;//打开定时器
ET0 =1;
TMOD = 0x01; //使用定时器0的工作方式
TH0 = (65535 - 50000)/256;//高8位 (50ms)
TL0 = (65535 - 50000)%256;//低8位
TR0 = 1; //开始计数
wei = 1;//
P0 = 0xfe;
wei = 0;
while(1)
{
if(time == 20) (50ms * 20 = 1s)
{
time = 0;
duan = 1;
P0 = table_duan[i];
duan = 0;
i++;
if(i == 10)
{
i = 0;
}
}
}
}
void timer_0() interrupt 1 //定时器中断 1
{
time++;
}
2,定时器和数码管结合使用
#include <reg51.h>
unsigned char code table_duan[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c};
int flag = 0;
void display(int num)
{
int ge, shi;
ge = num % 10;
shi = num / 10;
if (num % 2) //显示个位
{
P0 = 0xf7;
P2 = table_duan[ge ];
}
else
{
P0 = 0xfb;
P2 = table_duan[shi];
}
}
int main()
{
int tmp = -1;
EA = 1;
ET0 = 1;
TMOD = 0x01;
TH0 = (65535 - 10000) / 256;
TL0 = (65535 - 10000) % 256;
TR0 = 1;
while (1)
{
if (tmp != flag)
{
if (flag == 99)
{
flag = 0;
}
display(flag);
tmp = flag;
}
}
return 0;
}
void timer_0() interrupt 1
{
TH0 = (65535 - 10000) / 256;
TL0 = (65535 - 10000) % 256;
flag++;
}