立即注册 登录
返回首页

uid:201801的个人空间

日志

单片机数码管代码

已有 5759 次阅读2017-5-17 17:12 | 单片机, 数码管

#include <reg51.h>
#include <intrins.h>
#define DataPort P1
unsigned char code table[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
sbit SMG1=P3^4;//第一个数码管的位选
sbit SMG2=P3^5;//第2个数码管的位选
sbit SMG3=P3^6;//第3个数码管的位选
sbit SMG4=P3^7;//第4个数码管的位选
void  delayms(unsigned int t) //t ms
{
  unsigned int num,count; 
   for(num=t;num>0;num--)
     for(count=200;count>0;count--)
   {
_nop_();
}
}
//display(1234);
void display(unsigned int num)
{
DataPort=table[num/1000];
SMG1=1;  //第一个亮
delayms(5);
SMG1=0;

DataPort=table[num%1000/100];
SMG2=1;  //第二个亮
    delayms(5);
    SMG2=0;

    DataPort=table[num%100/10];
SMG3=1;  //第3个亮
    delayms(5);
    SMG3=0;

DataPort=table[num%10];
SMG4=1;  //第4个亮
    delayms(5);
    SMG4=0;
}
void timer0_init()
 {
EA=1;//打开总中断
ET0=1;//打开定时器0的中断
TMOD|=0x01;//设置成工作方式1 16位定时器
TH0=(65535-10000)/256; //设置初值
    TL0=(65535-10000)%256;
    TR0=1;//打开定时器
 }
unsigned char count;
void main()
  {
   SMG1=SMG2=SMG3=SMG4=0;//数码管的
   timer0_init();
   while (1)
   {
    display(count);
   }
  } 
//中断服务函数
void timer0_int()  interrupt 1
{
static unsigned char num;
TH0=(65535-10000)/256; //设置初值
    TL0=(65535-10000)%256;
num++;
if (num==100)
{
num=0;
count++;
if(count==60)
{
 count=0;
}
}
}  

路过

鸡蛋

鲜花

握手

雷人

发表评论 评论 (1 个评论)

回复 NAROTOHINATA 2017-5-17 17:13
如有错误,望帮忙改正!

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

返回顶部