C51单片机数码管的显示代码

利用单片机数码管的数字显示:

#include<stc15f2k60s2.h>

unsigned char CS[]={0x7f,0xbf,0xdf,0xef};
unsigned char DM[]={0x77,0x41,0x3b,0x6b,0x4d,0x6e,0x7e,0x43,0x7f,0x6f};

void Delay500ms()		//@11.0592MHz
{
	unsigned char i, j, k;

	i = 22;
	j = 3;
	k = 227;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}

void Delay100us()		//@11.0592MHz
{
	unsigned char i, j;

	i = 2;
	j = 15;
	do
	{
		while (--j);
	} while (--i);
}

void Delay100ms()		//@11.0592MHz
{
	unsigned char i, j, k;

	i = 5;
	j = 52;
	k = 195;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}


int main()
{
	int i,j;
	P1M1 &= ~0xff;  //P1推挽输出
   P1M0 |=  0xff;
	P0=0xff;
	j=0;
	while(1)
	{
		for(i=0;i<4;i++)
		{
			P0=CS[i];
			
			P1=DM[j];
			Delay500ms();
			
		}
		j++;
		if(j>9)
		{
			j=0;
		}
	}
	return 0;
}


C51单片机数码管显示倒计时时间通常会涉及到以下几个步骤: 1. **初始化数码管**: 首先需要设置数码管的工作模式(如共阳极或共阴极),并配置相应的端口作为驱动数码管的输入。 ```c #include <REGX51.H> sbit D7 = P0^7; // 如果是共阳极数码管,则D7对应最高位 ... void init_dig() { DDRA = 0xFF; // 全低电平初始,所有数码管点亮 PORTA = 0x00; // 数码管灭屏 } ``` 2. **定时器中断处理**:可以利用定时器T1或T0实现倒计时,并在定时溢出时触发中断服务函数。 ```c #define COUNT_DOWN_TIME (1000) // 设定倒计时的时间,单位毫秒 void timer1_isr() interrupt 1 { if (COUNT_DOWN_TIME > 0) { COUNT_DOWN_TIME--; display_time(); } else { // 倒计时结束,清除中断标志并关闭定时器 COUNT_DOWN_TIME = COUNT_DOWN_TIME_MAX; TI = 0; // 清除TI标志 TR1 = 0; // 关闭定时器 } } void display_time() { unsigned char seg[] = {B, C, D, E, F, A, 8}; // 数码管字符映射表 int digit = COUNT_DOWN_TIME % 10; // 获取当前分钟或秒数的十位 P0 = seg[digit]; // 显示十位数字 D7 = COUNT_DOWN_TIME >= 10 ? 1 : 0; // 显示个位数字(如果大于10,则点亮小数点) } ``` 3. **启动定时器**:在主程序中,需要开启定时器,并设置定时周期。 ```c init_timer1(); // 自定义的初始化定时器函数,根据实际硬件设置适当的定时值 IE = 1 << 1; // 开启定时器1中断 TIMSK = 1 << TOIE1; // 启动定时器1溢出中断 TR1 = 1; // 开始定时 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值