2011_10_27单片机(三)

 

今天主要总结静态数码管显示原理和中断控制原理。

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;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值