晚上搞了一晚上 总算是搞出来了
这是单片机的代码
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
unsigned char code disp_code[] = { 0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8,
0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e, 0xbf };
uchar count = 0;
sbit P15 = P1 ^ 5;
sbit P27 = P2 ^ 7;
uchar number = 0;
void timer_inter()
interrupt 1 using 1
{
count++;
if (count == 20)
{
count = 0;
P15 = ~P15 ;
}
TH0 = 0x3C;
TL0 = 0xB0;
}
void main()
{
P27=0;
P15=1;
TMOD = 0x51;
TH0 = 0x3C;
TL0 = 0xB0;
ET0 = 1;
EA = 1;
TL1 = 0x00;
ET1 = 1;
TR1 = 1;
TR0 = 1;
while(1)
{
P0=disp_code[TL1];
}
}
这个代码要p1.5 和p3.5 连接 前面一个作为脉冲发生器(T0) 后一个作为计数器(T1)
几个误区:
1定时器/计数器和中断引脚是两个概念, 定时器溢出后就会运行中断子程序 但是当作计数器的时候 就不存在中断子程序了
而是直接 TL 加一
2 脉冲是要一高一低电平后才算是一个脉冲 也就是说P3.5取反再取反才算是计数器加一