第六节 单只数码管循环显示0~9

51单片机程序,大家在学习单片机的时候不能过于着急,要从基础学起,才能起高楼。
作者使用的STC89C52RC,晶振用的是11.0592MHz。
实验内容如下:
1.电路图,电路解释,开发板实操。
2.Keil代码图编译图,程序源码,附加程序代码详解。
3.实物图,LED模拟交通灯。
链接:单只数码管循环显示0~9工程源码,内置文档每句带有详细解释写的电路与程序详解文档

一、电路图解释
在这里插入图片描述在这里插入图片描述

先看共阳极数码管,数码管其实也就是有8个LED灯,看左图,共阳极就是公共端是链接VCC,LED灯的负极链接着单片机的IO口,看右图P0的八个IO口,比如我想亮0,那么就应该是abcdef亮,因为是共阳极,所以P0=0b11000000=0xC0。
单片机STC89C52RC引脚使用的是P0作为段选,8个脚位,分别连接8个数码管的段选负极。JPSMG链接5V,P2.7作为位选,连接PNP的基极,P2.7=0,开发板中最低位8H=1,数码管通电;P2.7=1,开发板中最低位8H=0,数码管断电。

在这里插入图片描述在这里插入图片描述

二、程序代码解释
/*
作者:pjspsy
日期:20240414
名称:单只数码管循环显示0~9
说明:主程序中的循环语句反复将09的段码送至P0口,使数字09循环显示
*/
#include<reg51.h>//头文件,每个程序都必须有。
#include<intrins.h>//crol()在intrins.h中定义的
#define uchar unsigned char//定义8位无符号数据的宏定义,可以缩短程序,可读性好。
#define uint unsigned int//定义16位无符号数据的宏定义,可以缩短程序,可读性好。
sbit SMG1=P2^7;//宏定义最低位数码管
uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//共阳极数码管的段选
//延时
void DelayMS(uint x)//X=1,就是延时1ms。
{
uchar t;//定义一个局部参数i。
while(x–)//循环X–,直到0为止跳出while循环。
{
for(t=0;t<120;t++);//for循环,循环120次,当i>120时跳出for循环。
} //在第一章中已解析for(i=0;i<120;i++)为什么的是1us,请移步第一章查看详解
}
//主程序
void main()
{
uchar i=0;//定义一个局部变量
SMG1=0;//8H数码管写0,PNP打开,共阳数码管接5V
P0=0x00;//数码管段选全黑

	while(1)//while循环。
	{ 	/* for(;i<11;i++){ P0=~DSY_CODE[i]; DelayMS(300);}  //注:另一方案 */
			//P0=~DSY_CODE[i];//如果是共阴,段选数组取反
			P0=DSY_CODE[i];//共阳数码管显示i=0就是DSY_CODE[0],显示0
			i=(i+1)%10;//0+1=1%10=1,为下一位做好准备
			DelayMS(500);//等待500ms,延时要长一点,否则会导致数码管跳动太快,肉眼无法分辨,
	}

}
在这里插入图片描述

三、实物图,led灯闪烁
在这里插入图片描述

一边亮红灯一边亮绿灯,下面是烧写,用的串口烧写。
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pjspsy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值