51单片机C语言led流水灯及数码管实现秒表
51单片机C语言练习题
单片机型号
普中科技的
led练习题
led小灯闪烁
#include<reg52.h>
sbit LED = P0^0;
void main()
{unsigned int i=0;while(1){LED = 1;for(i=0;i<60000;i++);LED = 0;for(i=0;i<60000;i++);}
}
led流水灯
#include<reg52.h>void main()
{unsigned char LED = 0x01;unsigned int i=0;while(1){P0 = LED;LED = LED << 1;//从左向右依次点亮LEDif(LED == 0) //点亮第八盏后,点亮第一盏{LED = 0x01;}for(i=0;i<40000;i++);//延迟}
}
每隔一秒点亮一次 led,led闪烁,定时器实现
- 配置定时器工作模式
- 定时器赋初值
- 启动定时器
- 判断定时器是否溢出
#include<reg52.h>
sbit LED = P0^0;
void main()
{unsigned char cnt = 0;unsigned int i=0;TMOD = 0x01;TH0 = 0xD8;TL0 = 0xF0;TR0 = 1;LED = 0;while(1){if(TF0 == 1){TF0 = 0;TH0 = 0xD8;TL0 = 0xF0;cnt++;if(cnt == 100){cnt = 0;LED = ~LED;}}}}
数码管练习题
静态数码管依次显示0-F,每隔一秒更换一次
#include<reg52.h>
unsigned char code segCodeTable[16] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
void main()
{unsigned char cnt = 0;unsigned int i=0;TMOD = 0x01;TH0 = 0xD8;TL0 = 0xF0;TR0 = 1;while(1){if(TF0 == 1){TF0 = 0;TH0 = 0xD8;TL0 = 0xF0;cnt++;if(cnt == 100){cnt = 0;P0 = segCodeTable[i];i++;}if(i == 16){i = 0;}}}}
数码管实现秒表
#include<reg52.h>
//共阴极数码管
unsigned char code segCodeTable[16] = {
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79};
unsigned char code posCodeTable[8] = {
0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//位选控制 查表的方法控制
//数码管显示缓冲区,初始时刻为全零
unsigned char LEDBuffer[6] = {0x3f,0x3f,0x3f,0x3f,0x3f,0x3f };
void main()
{ unsigned int cnt = 0;unsigned long sec = 0;unsigned char i = 0;TMOD = 0x01;TH0 = 0xFC;TL0 = 0x18;TR0 = 1;while(1){if(TF0 == 1){TF0 = 0;TH0 = 0xFC;TL0 = 0x18;cnt++;if(cnt == 1000){cnt = 0;sec++;//每隔一秒刷新一次数码管显示缓冲区LEDBuffer[0] = segCodeTable[sec%10];LEDBuffer[1] = segCodeTable[sec/10%10];LEDBuffer[2] = segCodeTable[sec/100%10];LEDBuffer[3] = segCodeTable[sec/1000%10];LEDBuffer[4] = segCodeTable[sec/10000%10];LEDBuffer[5] = segCodeTable[sec/100000];}//每隔1ms输出一次段码与位码P0 = LEDBuffer[i];P1 = posCodeTable[i];i++;if(i == 6){i = 0;}}}}
中断方式实现数码管秒表
#include<reg52.h>
//共阴极数码管
unsigned char code segCodeTable[16] = {
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79};
unsigned char code posCodeTable[8] = {
0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//位选控制 查表的方法控制
//数码管显示缓冲区,初始时刻为全零
unsigned char LEDBuffer[6] = {0x3f,0x3f,0x3f,0x3f,0x3f,0x3f };
unsigned char i = 0;
unsigned char flag1s = 0;unsigned int cnt = 0;
void main()
{ unsigned long sec = 0;TMOD = 0x01;TH0 = 0xFC;TL0 = 0x18;TR0 = 1;EA = 1;ET0 = 1;while(1){if(flag1s == 1){sec++;flag1s = 0;//每隔一秒刷新一次数码管显示缓冲区LEDBuffer[0] = segCodeTable[sec%10];LEDBuffer[1] = segCodeTable[sec/10%10];LEDBuffer[2] = segCodeTable[sec/100%10];LEDBuffer[3] = segCodeTable[sec/1000%10];LEDBuffer[4] = segCodeTable[sec/10000%10];LEDBuffer[5] = segCodeTable[sec/100000];}}}void InterruptTime0() interrupt 1
{TH0 = 0xFC;TL0 = 0x18;cnt++;if(cnt == 1000){cnt = 0;flag1s = 1;}//每隔1ms输出一次段码与位码P0 = LEDBuffer[i];P1 = posCodeTable[i];i++;if(i == 6){i = 0;}
}
数码管高位为零不显示
#include<reg52.h>
//共阴极数码管
unsigned char code segCodeTable[16] = {
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79};
unsigned char code posCodeTable[8] = {
0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//位选控制 查表的方法控制
//数码管显示缓冲区
unsigned char LEDBuffer[8] = {0x3f,0x00,0x00,0x00,
0x00,0x00,0x00,0x00};
unsigned int cnt = 0;
unsigned char i = 0;
unsigned char flag1s = 0;
unsigned char temp = 0x7f;
void main()
{unsigned long sec = 0;TMOD = 0x01;TH0 = 0xFC;TL0 = 0x18;TR0 = 1;EA =1;ET0 =1;while(1){if(flag1s == 1){flag1s = 0;//刷新数码管显示缓冲区sec++;if(sec>=0&&sec<10){LEDBuffer[0] = segCodeTable[sec%10];}else if(sec>=10&&sec<100) //sec小于10,不更新数码管高位显示缓冲区{LEDBuffer[0] = segCodeTable[sec%10];LEDBuffer[1] = segCodeTable[sec/10%10];}else if(sec>=100&&sec<1000){LEDBuffer[0] = segCodeTable[sec%10];LEDBuffer[1] = segCodeTable[sec/10%10];LEDBuffer[2] = segCodeTable[sec/100%10];}else if(sec>=1000&&sec<10000){LEDBuffer[0] = segCodeTable[sec%10];LEDBuffer[1] = segCodeTable[sec/10%10];LEDBuffer[2] = segCodeTable[sec/100%10];LEDBuffer[3] = segCodeTable[sec/1000%10];}else if(sec>=10000&&sec<100000){LEDBuffer[0] = segCodeTable[sec%10];LEDBuffer[1] = segCodeTable[sec/10%10];LEDBuffer[2] = segCodeTable[sec/100%10];LEDBuffer[3] = segCodeTable[sec/1000%10];LEDBuffer[4] = segCodeTable[sec/10000%10];}else if(sec>=100000){LEDBuffer[0] = segCodeTable[sec%10];LEDBuffer[1] = segCodeTable[sec/10%10];LEDBuffer[2] = segCodeTable[sec/100%10];LEDBuffer[3] = segCodeTable[sec/1000%10];LEDBuffer[4] = segCodeTable[sec/10000%10];LEDBuffer[5] = segCodeTable[sec/100000];} }}
}void InterruptTimer0() interrupt 1
{TH0 = 0xFC;TL0 = 0x18;cnt++;if(cnt == 1000){cnt = 0;flag1s = 1;}//每隔一ms输出一次段码和位码P0 = LEDBuffer[i];P1 = posCodeTable[i];i++;if(i == 6){i = 0;}}
51单片机C语言led流水灯及数码管实现秒表相关推荐
- 简单51单片机c语言编程流水灯,51单片机如何实现流水灯?51单片机实现流水灯的三种方法详细分析...
描述 首先,介绍下原理.下图为主控芯片和流水灯模块的原理图.流水灯模块接在单片机的P1口,由原理图可以知道,在P1口给一个低电平即可点亮LED灯.相反,如果要LED灯熄灭,就要把P1口的电平变为高电平 ...
- 51单片机 按键控制LED流水灯模式
本章博客实现按键控制LED流水灯模式的功能 1.将之前文件中Delay.c.h复制过来,进行添加 2.模块化编程 3.main.c #include <REGX52.H> #include ...
- 51单片机入门学习--LED流水灯呼吸灯
LED led:发光二极管,Light Emitting Diode,可用万用表测量正负极 二极管电路图 直插式led,长的一端是正极,短的一端是负极 贴片式led,三角形的尖指向的是负极,有颜色的是 ...
- 51单片机用中断实现流水灯,数码管和点阵同时显示
小白自备笔记··· ···· 数码管1S左移,6位数码管从999999每一秒钟减一倒着计数,点阵9-0倒计时显示. #include<reg52.h> //头文件 #include< ...
- 51单片机学习笔记5 流水灯实现及蜂鸣器控制
51单片机学习笔记5 流水灯实现及蜂鸣器控制 一.流水灯 1. 硬件电路 2. 代码实现 (1) 点亮一个LED的基本操作 (2) 使用算术左移实现流水灯 (3) 使用库文件左移函数 二.蜂鸣器 1. ...
- 51单片机 74HC154译码器制作流水灯+Proteus仿真
51单片机 74HC154译码器制作流水灯+Proteus仿真 Proteus仿真 实例代码 #include <reg52.h> #define uint unsigned int #d ...
- c51单片机学习笔记-LED流水灯实验
目的:实现 LED 流水灯,只需循环让 D1-D8 指示灯逐个点亮. 方法:点亮 D1 且把 D2-D8 熄灭,延时一段时间后再点亮 D2 且把 D1. D3-D8 熄灭,延时一段时间后再点亮 D3 ...
- 51单片机AT24C02写读流水灯实例+Proteus仿真
51单片机AT24C02写读流水灯实例+Proteus仿真 Proteus仿真 这个流水灯的状态是通过读取AT24C02地址中的数值来改变的.(有点废AT24C02) 程序代码 #include &l ...
- 51单片机通过CD4051实现流水灯效果+Proteus仿真
51单片机通过CD4051实现流水灯效果+Proteus仿真 Proteus仿真效果 CD4051 CD4051是一款八选一模拟开关电路,内置3个地址选择端(A0-A2),低有效的使能输入端( E), ...
最新文章
- oracle 分区表的建立方法
- 谈谈微服务设计中的API网关模式
- 听说英飞凌内推技术岗位有大额奖金
- [导入]3.5 [ Enterprise Library ]注入模型设计
- mysql warning 在哪看_查看MySQL的warning
- 一个完整的python项目源码-一个Python开源项目-哈勃沙箱源码剖析(下)
- 读书笔记----10日摘抄整理(01)
- 安装Ubuntu server并实现远程访问
- Android——Fragment介绍
- KXMovie基于ffmpeg的播放器
- FIR特性及仿真实现_01
- “约见”面试官系列之常见面试题之第八十七篇之ajax发送多个请求优化(建议收藏)
- 解决moss的log文件不断变大的办法
- Bailian4145 放弃考试 POJ2976 ZOJ3068 Dropping tests【二分法+01分数规划】
- 关于Metropolis-Hasting采样的两个注意事项
- 自己学Docker:4.開始了解Docker的工作模式
- 【UAC】Windows UAC 原理浅析
- 计算机基础知识总结(一)
- 2015 年全国电赛题——风力摆控制系统(B 题)
- Hbase的table存储详解