您的位置:首页 > 其它

51单片机:在2位数码管上循环显示00-99,间隔0.5秒

2018-01-09 11:51 393 查看

原理图



#include <reg52.h>
#define uint unsigned int                   // 宏
#define uchar unsigned char
sbit a = P1^0;
sbit b = P1^1;
sbit c = P1^2;
sbit d = P1^3;
uchar code table[]=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳极0-916进制编码
void delayms(uint); //延时函数声明
void display(uint); //自定义位选函数
uint num=0;
uchar shi=0;

void display(uint num)
{
d=1;    //共阳极数码管高电平有效
P0=table[num%10];   //循环显示0-9
delayms(5);         //刷新
P0=0XFF;
d=0;

c=1;    //共阳极数码管高电平有效
P0=table[(num/10)%10];      //循环显示0-9
delayms(5);         //刷新
P0=0XFF;
c=0;
}

void jishu() interrupt 1
{
if(shi==10)
{               //10*50MS定时时间为0.5秒
shi=0;
num++;
}
TH0=(65536-50000)/256;  //重新赋值
TL0=(65536-50000)%256;
shi++;          //50毫秒加1,加20次为一秒
}

void delayms(uint xms)       //延时程序
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}

void main()
{

TMOD=0X01;      /*中断初始化*/
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;               //中断总开关
ET0=1;              //请求中断
TR0=1;              //允许中断

while(1)
{

//关闭其他位
a=0;
b=0;
display(num);       //调用函数

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: