设计要求:
在8位8端的数码管上动态显示76543210,快速显示时人眼看到的效果为同时亮起
————————————————————————————————————————————
实现目标:
————————————————————————————————————————————
数码管编码计算:
#include typedef unsigned char uchar;
uchar table[] =
{
//Proteus图上数码管下引脚显示对应的断码,从前往后分别是0123456789AbCdEF
0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6, 0xBE, 0xE0, 0xFE, 0xF6, 0xEE, 0x3E, 0x9C, 0x7A, 0x9E, 0x8E
};
uchar address[] =
{
0xFE, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7F
};
void Delay(uchar m)
{
unsigned char a, b;
for(; m > 0; m--)
for(b = 142; b > 0; b--)
for(a = 2; a > 0; a--);
}
int main()
{
uchar i = 0;
while(1)
{
if (i == 8) //一轮循环亮起后从头开始
i = 0;
P2 = address[i]; //通过P2控制要亮的灯的位置
P1 = table[i]; //通过P1控制要显示的数
++i;
Delay(1); //快速动态显示
// Delay(1000); //慢速动态显示
}
}
关键字:51单片机 数码管 动态显示
引用地址:
51单片机入门 - 数码管动态显示实验
推荐阅读最新更新时间:2024-11-03 11:09
51单片机I/O模拟I2C 程序
/ 此程序是I2C操作平台(主方式的软件平台)的底层的C子程序,如发送数据 及接收数据,应答位发送,并提供了几个直接面对器件的操作函数,它很方便的 与用户程序连接并扩展..... 经过本人验,绝对好用! / bit ack; /*应答标志位*/ /* 起动总线函数 函数原型: void Start_I2c(); 功能: 启动I2C总线,即发送I2C起始条件. / void Start_I2c() { SDA=1; /*发送起始条件的数据信号*/ _Nop(); SCL=1; _Nop(); /*起始条件建立时间大于4.7u
[单片机]
51单片机数码管的静态与动态显示
操作数码管的显示其实与操作led灯的操作本质上差不多,可以把一个数码管当做操作8段led灯来让它显示我们所预想的效果,如下图所示。 假如我想让一个数码管显示1,把我只需把B、C两个LED灯点亮就可以了,数码管的a~dp(数码管的点)对应字节的1~8位,假设为共阳极接法,即为1111 1001对应十六进制的F9 数码管的显示分为静态显示和动态显示 数码管的静态显示其实就是一直给数码管的特定位一直发送一样的数据就可以了, 动态显示的原理其实是一位一位的操作操作每个数码管,因为对每一位的操作特别快,并且在一直轮流给数,原理其实就是利用了人眼的视觉暂留效果和发光管的余晖作用来达到效果,只是操作的比较快,我们人眼视觉分辨不
[单片机]
51单片机(二十)—— 定时器产生方波信号
在本文中,我们用定时器0来产生方波信号,包含两个实验,实验1产生一个频率为10kHz的方波信号,实验2产生一个频率为100Hz的方波信号。 实验1 实验1 中定时器0的初始化代码如下所示。 void init_T0(void) { TMOD|= 0x02; //使用方式2,8位自动重装载定时器 TH0=256-50; //给TH0和TL0赋初值,计数周期为50个机器周期 TL0=256-50; //采用12MHz的晶振,计时时长为50us EA=1; //总中断打开 ET0=1; //定时器中断打开 TR0=1; //定时器开关打开 } 代码中将定时器0设置
[单片机]
51单片机方波发生器程序100HZ和200HZ按键控制
//本机晶振11.0592,采用stc89c51单片机,P3.2 P3.3两个按键控制方波发生器的输出频率. #include reg52.h #define uchar unsigned char #define uint unsigned int sbit output=P1^7; //输出点 sbit oneset=P3^2; //设置100HZ sbit twoset=P3^3; //设置200HZ uint number1=0; //定时器0高8位 uint number2=0; //定时器0低8位 void main() { TMOD=0x01; TH0=0xee; //任意设定初值 TL0=0x0b; E
[单片机]
51单片机把4位16进制数转成10进制数的方法
2位16进制转10进制,用除以10求商跟余数的方法,即可。 4位16进制数呢?DIV指令只可以对2位16进制数进行除法运算啊,求高手解答。 例如把TH1 TL1的数值转成十进制, 分别存入R4 R3 R2 R1 R0。 ;------------------------------------------------------------------ 下面把这段转换程序,写成子程序的结构,便于网友移植。 ; 程序经过仿真调试通过,如下所示: ;------------------------------------------------------------------ ; MOV R0,
[单片机]
基于51单片机的智能快速充电器设计
1.引言 本控制系统是为120w智能快速稳压电源设计的。 该快速充电器是为部队在野战条件下工作而研制的,因此要求其具有体积小、重量轻、智能化程度高、操作简便等优点,同时对电源的可靠性和抗干扰性提出了很高的要求。有稳压供电和充电两种工作方式。稳压供电时输出恒定的24V;处于充电状态时有四种充电方式:常规充电、快速充电、电池浮冲、电池训练,可以为镉镍、氢镍蓄电池充电。 2. 控制系统总体设计要求 根据实际情况,本控制系统要完成以下功能: (1) 能自动识别电池的类型(镍镉电池、镍氢电池、锂电池)。 (2) 有稳压供电和充电两种工作模式。 (3) 采用最高电压Vmax、最高温度Tmax、最长充电时间
[单片机]