新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 单片机计数器C语言练习

单片机计数器C语言练习

作者:时间:2013-02-18来源:网络收藏
要求:编写一个程序,将T0作为来使用,对外部信号计数,将所计数字显示在数码管上。

  该部分的硬件电路如图所示,U1的P0口和P2口的部份引脚构成了6位LED数码管驱动电路,数码管采用共阳型,使用PNP型三极管作为片选端的驱动,所有三极管的发射极连在一起,接到正电源端,它们的基极则分别连到P2.0…P2.5,当P2.0…P2.5中某引脚输是低电平时,三极管导通,给相应的数码管供电,该位数码管点亮哪些笔段,则取决于笔段引脚是高或低电平。图中看出,所有6位数码管的笔段连在一起,通过限流电阻后接到P0口,因此,哪些笔段亮就取决于P0口的8根线的状态。


  编写程序时,首先根据硬件连线写出LED数码管的字形码、位驱动码,然后编写程序如下:

  #include "reg51.h"

  #define uchar unsigned char

  #define uint unsigned int

  uchar code BitTab[]={0x7F,0xBF,0xDF,0xEF,0xF7,0xFB}; //位驱动码

  uchar code DispTab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,

0x83,0xC6,0xA1,0x86,0x8E,0xFF}; //字形码

  uchar DispBuf[6]; //显示缓冲区

  void Timer1() interrupt 3

  { uchar tmp;

  uchar Count; //,显示程序通过它得知现正显示哪个数码管

  TH1=(65536-3000)/256;

  TL1=(65536-3000)%256; //重置初值

  tmp=BitTab[Count]; //取位值

  P2=P2|0xfc; //P2与11111100B相或

  P2=P2tmp; //P2与取出的位值相与

  tmp=DispBuf[Count];//取出待显示的数

  tmp=DispTab[tmp]; //取字形码

  P0=tmp;

  Count++;

  if(Count==6)

  Count=0;

  }

  void main()

  { uint tmp;

  P1=0xff;

  P0=0xff;

  TMOD=0x15; //定时器0工作于计数方式1,定时器1工作于定时方式1

  TH1=(65536-3000)/256;

尘埃粒子计数器相关文章:尘埃粒子计数器原理

上一页 1 2 下一页

评论


相关推荐

技术专区

关闭