×
单片机 > 单片机程序设计 > 详情

单片机数码管显示数字递增

发布时间:2020-05-26 发布时间:
|

让单片机的数码管显示的数从0开始递增一直到255,然后重新置0,再递增,如此循环. 
  还是用到了将要显示的数进行百位,十位,个位的分离. 
  从这篇开始,以后的程序就要注意程序的规范性,与可读性了.源代码如下(已经成功调通): 

#include
#define uint unsigned int
#define uchar unsigned char

sbit sda = P1^0;
sbit clk = P1^1;
sbit dig1 = P1^2;
sbit dig2 = P1^3;
sbit dig3 = P1^4;
sbit dig4 = P1^ 5;

uchar code table[]={0x7e,0x0c,0xb6,0x9e,0xcc,0xda,0xfa,0x0e,0xfe,0xde};
uchar times;

void init();
void delay(uchar);
void write(uchar);
void display(uchar);

void main()
{
	uchar i = 0;
	init();
	while(1)
	{
		display(i);
		if(times>2)
		{
			times = 0;
			i ++;
			if(i==256)
				i = 0;
		}
	}
}
/** 显示一个3位的整数 **/
void display(uchar num)
{
	uchar bai,shi,ge;
	bai = num/100;
	shi = num%100/10;
	ge = num%10;
	/* 显示个位 */
	dig4 = 0;
	write(table[ge]);
	delay(10);
	dig4 = 1;
	/* 显示十位 */
	dig3 = 0;
	write(table[shi]);
	delay(10);
	dig3 = 1;
	/* 显示百位 */
	dig2 = 0;
	write(table[bai]);
	delay(10);
	dig2 = 1;

}
/** 程序初始化函数 **/
void init()
{
	clk = 0;
	times = 0;
	TMOD = 0x01;   //定时器模式1
	TH0 = (65536-50000)/256; //每500毫秒产生一次中断
	TL0 = (65536-50000)%256;
	TR0 = 1;  //开始计时
	EA = 1;	  //打开总中断开关
	ET0 = 1;
}
/** 向数据码管写入一个字节数据 **/
void write(uchar u)
{
    uchar i;
	for(i=0;i<8;i++)
	{
		clk = 1;
		sda = u&0x80;
		clk = 0;
		u = u<<1;	
	}
}
/** 延迟函数 **/
void delay(uchar t)
{
	uchar x,y;
	for(x=t;x>0;x--)
		for(y=101;y>0;y--);
}
/** 1号中断 **/
void timer0() interrupt 1
{
	TH0 = (65536-50000)/256; //每500毫秒产生一次中断
	TL0 = (65536-50000)%256;
	times ++;
}


关键字:单片机  数码管显示  数字递增 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
ARM 汇编的必知必会