今天主要总结静态数码管显示原理和中断控制原理。
1. 静态数码管显示原理
80C51(40引脚)常用重要的引脚:
(1-8) P1:P1.0-P1.7
9 Reset
40 VCC
20 GND
10-17 P3:P3.0-P3.7(特殊功能寄存器)
可以正常使用,可以做特殊用途(给特殊寄存器str赋值)
电容:通交隔直
晶振:起振正弦波的(12M_30PF[电容]6M_20[电容])
LED(段显示8段)器件
发光二级管共阴极:二极管阴极并联起来接地(视频实验板用共阴极)
abcdefg(八段逆时针循环排列) dp(小数点)
发光二级管共阳极:二极管阳极并联起来电源
静态数字显示:向端口输入段选信号(共阴极16进制数)
P0无上拉电阻(10K提高输出端 电流)
锁存器:高电平电流直通,低电平电平保存
段选开关(控制点亮哪个led数码管[给高低电平],),位选(控制并联电流,显示数码管数字)
unchar code table[]={};//编译后放入程序存储器中
2. 中断控制原理
(1) 外部中断控制
外部中断可以写两个中断处理程序即INT0,INT1,对应中断编号为0,2
中断产生条件:外部中断口P3^2给低电平时产生中断
void main()
{
uchar temp=0x01;
uchar i=0;
//P2=0xff;
//P2=temp;
//P0=table[0];
//delay(500);
EA=1; //开总中断控制允许开关,IE寄存器中的特殊位EA
EX0=1; //开INT0中断控制允许开关,IE寄存器中的特殊位EX0
//IT0外部中断寄存器TCON的特殊位,控制中断触发方式
//IT0=0; //电平触发,中断源给低电平,一直响应中断
IT0=1; //边沿触发,中断源给低电平,只响应一次
while(1)
{
p1_0=1;
P2=temp; //段选开关,负责给当前led灯加高电平(共阳极)
P0=table[i];//位选开关,负责给led灯显示数字
temp=_crol_(temp,1);
i=(i+1)%8;
delay(500);
}
}
外部中断INT0处理程序
//P3^2 IT0中断源给低电平时触发中断服务
void enter0()interrupt 0 //INT0中断编号0
{
p1_0=0;
}
(2) 定时器中断控制
作用:精确定时,取代延时函数
uchar tt=0;
void main()
{
uchar temp=0x01;
uchar i=0;
//P2=0xff;
//P2=temp;
//P0=table[0];
//delay(500);
EA=1; //开总中断控制开关
ET0=1; //开定时器控制中断开关
//设置中断工作方式为模式1(16位自加器)
TMOD=0x01;
//设置定时器50ms中断一次,中断后,需将TH0、TL0置0
TH0=(65536-50000)/256; //高8位50ms产生溢出
TL0=(65536-50000)%256; //低8位50ms产生溢出
TR0=1; //设置定时器0开启
//EX0=1;
//IT0=0; //电平触发,中断源给低电平,一直响应中断
//IT0=1; //边沿触发,中断源给低电平,只响应一次
while(1)
{
//当tt==20时,定时器经历中断时间恰好为1s(20*50ms)
if(20==tt)
{
tt=0; //将tt置0,重新计算
p1_0=1;
P2=temp; //段选开关,负责给当前led灯加高电平(共阳极)
P0=table[i];//位选开关,负责给led灯显示数字
temp=_crol_(temp,1);
i=(i+1)%8;
}
//delay(500);
}
}
//P3^4 IT0中断源给低电平时触发中断服务
//定时器/外部中断寄存器TCON}
void enter1()interrupt 1
{
tt++;//16位计数器自加
//将TH0、TH1置0
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
}