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流水灯及数码管实现秒表相关推荐

  1. 简单51单片机c语言编程流水灯,51单片机如何实现流水灯?51单片机实现流水灯的三种方法详细分析...

    描述 首先,介绍下原理.下图为主控芯片和流水灯模块的原理图.流水灯模块接在单片机的P1口,由原理图可以知道,在P1口给一个低电平即可点亮LED灯.相反,如果要LED灯熄灭,就要把P1口的电平变为高电平 ...

  2. 51单片机 按键控制LED流水灯模式

    本章博客实现按键控制LED流水灯模式的功能 1.将之前文件中Delay.c.h复制过来,进行添加 2.模块化编程 3.main.c #include <REGX52.H> #include ...

  3. 51单片机入门学习--LED流水灯呼吸灯

    LED led:发光二极管,Light Emitting Diode,可用万用表测量正负极 二极管电路图 直插式led,长的一端是正极,短的一端是负极 贴片式led,三角形的尖指向的是负极,有颜色的是 ...

  4. 51单片机用中断实现流水灯,数码管和点阵同时显示

    小白自备笔记··· ···· 数码管1S左移,6位数码管从999999每一秒钟减一倒着计数,点阵9-0倒计时显示. #include<reg52.h> //头文件 #include< ...

  5. 51单片机学习笔记5 流水灯实现及蜂鸣器控制

    51单片机学习笔记5 流水灯实现及蜂鸣器控制 一.流水灯 1. 硬件电路 2. 代码实现 (1) 点亮一个LED的基本操作 (2) 使用算术左移实现流水灯 (3) 使用库文件左移函数 二.蜂鸣器 1. ...

  6. 51单片机 74HC154译码器制作流水灯+Proteus仿真

    51单片机 74HC154译码器制作流水灯+Proteus仿真 Proteus仿真 实例代码 #include <reg52.h> #define uint unsigned int #d ...

  7. c51单片机学习笔记-LED流水灯实验

    目的:实现 LED 流水灯,只需循环让 D1-D8 指示灯逐个点亮. 方法:点亮 D1 且把 D2-D8 熄灭,延时一段时间后再点亮 D2 且把 D1. D3-D8 熄灭,延时一段时间后再点亮 D3 ...

  8. 51单片机AT24C02写读流水灯实例+Proteus仿真

    51单片机AT24C02写读流水灯实例+Proteus仿真 Proteus仿真 这个流水灯的状态是通过读取AT24C02地址中的数值来改变的.(有点废AT24C02) 程序代码 #include &l ...

  9. 51单片机通过CD4051实现流水灯效果+Proteus仿真

    51单片机通过CD4051实现流水灯效果+Proteus仿真 Proteus仿真效果 CD4051 CD4051是一款八选一模拟开关电路,内置3个地址选择端(A0-A2),低有效的使能输入端( E), ...

最新文章

  1. oracle 分区表的建立方法
  2. 谈谈微服务设计中的API网关模式
  3. 听说英飞凌内推技术岗位有大额奖金
  4. [导入]3.5 [ Enterprise Library ]注入模型设计
  5. mysql warning 在哪看_查看MySQL的warning
  6. 一个完整的python项目源码-一个Python开源项目-哈勃沙箱源码剖析(下)
  7. 读书笔记----10日摘抄整理(01)
  8. 安装Ubuntu server并实现远程访问
  9. Android——Fragment介绍
  10. KXMovie基于ffmpeg的播放器
  11. FIR特性及仿真实现_01
  12. “约见”面试官系列之常见面试题之第八十七篇之ajax发送多个请求优化(建议收藏)
  13. 解决moss的log文件不断变大的办法
  14. Bailian4145 放弃考试 POJ2976 ZOJ3068 Dropping tests【二分法+01分数规划】
  15. 关于Metropolis-Hasting采样的两个注意事项
  16. 自己学Docker:4.開始了解Docker的工作模式
  17. 【UAC】Windows UAC 原理浅析
  18. 计算机基础知识总结(一)
  19. 2015 年全国电赛题——风力摆控制系统(B 题)
  20. Hbase的table存储详解

热门文章

  1. 笔记:less的三种使用方法
  2. VS2013编译OBS源码
  3. 前端导出文件,后端返回文件流过大直接干崩溃
  4. 17 初探Context的使用场景
  5. Dynagen0.11+Pemuwrapper入手麻烦二三事——告诉初学者直路
  6. 合并bin文件-----带boot发布版本比较好用的bat(便捷版)
  7. Python实现atm机的功能
  8. RPM方式安装MySQL5.6
  9. 使用 python 操作 redis
  10. Kindeditor放置两个调用readonly错误