下列代码为自行学习时的复盘总结,有需要可以参考,第一行会写大概功能。
持续更新中…

#include <REGX51.H>   //功能:交通灯  190925
sbit LED=P1^0;
void delay(unsigned int i)
{while(i--);
}
void main()
{while(1){P1=0xDE;  //A green B  reddelay(50000);delay(50000);delay(50000);delay(50000);delay(20000);P1=0xEE; // A yellow B red    delay(50000);P1=0xF3;   // A red B green delay(50000);delay(50000);delay(11000);P1=0xF5;    // A red B yellow delay(50000);}
}
#include <REGX51.H>       //功能:24秒倒计时响蜂鸣器  190924
sbit LED=P1^0 ;    //灯
sbit Be=P2^0;       //蜂鸣器
sbit QC=P3^2 ;     //取消键,把线连到这个位置,按下后暂停
sbit KS=P3^3;      //开始键,按下后开始
void delay (unsigned int i )
{ while(i--);}
void main ()
{unsigned int T_count=0;unsigned char count;LED=1;Be=1;QC=1;KS=1;TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;while(KS);TR0=1;count=48;   //设置秒数,48为24swhile(1){if(TF0==1){TF0=0;TH0=(65536-50000)/256;TL0=(65536-50000)%256;T_count++;if(T_count==48)   //设置秒数,48为24s{T_count=0;LED=~LED;count--;if(count==0){while(QC){Be=0;delay(200);Be=1;delay(200);}Be=1;while(KS);count=10;}}}}}
#include <REG51.H>   // 功能: 显示数字,按下一个按键变下一位数  191028
sbit AX=P3^2;      //   按下按键
void delay1s(unsigned char i)
{ for (i=0;i<20;i++){TH1=0x3c;TL1=0xb0;TR1=1;while(!TF1);TF1=0;  }
}
void main ()
{unsigned char code disp[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; unsigned char two;TMOD=0x10;P2=0x00;while(1){for(two=0;two<10;two++){while(AX);while(!AX);delay1s(20);P0=disp[two];}}
}
#include <REGX51.H>  //用数组在数码管显示学号   191104
void delay (unsigned char i)
{while(i--);}
int wz[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
int led[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void main(){while(1){ P0=wz[0];P1=led[5];delay(100);P0=wz[1];P1=led[9];delay(100);P0=wz[2];P1=led[5];delay(100);P0=wz[3];P1=led[0];delay(100);P0=wz[4];P1=led[1];delay(100);P0=wz[5];P1=led[0];delay(100);P0=wz[6];P1=led[2];delay(100);P0=wz[7];P1=led[1];delay(100);}
}
#include <REGX51.H>   //时钟电路 可显示时间  由于晶振问题其实时间不是很准  191107
void delay1ms()   //5ms的话,时间会一直显示在刷新
{TH0=(65536-1000)/256;TL0=(65536-1000)%256;TR0=1;while(!TF0);TF0=0;}
unsigned char i,h=18,m=36,s=20;    //想要显示的时间在这里设置,时分秒
int wz[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
int led[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};
void main()
{TMOD=0x01;while(1){for(i=0;i<125;i++){ P0=wz[0];P1=led[s%10];delay1ms();P0=wz[1];P1=led[s/10];delay1ms();P0=wz[2];P1=led[10];    //显示-delay1ms();P0=wz[3];P1=led[m%10];delay1ms();P0=wz[4];P1=led[m/10];delay1ms();P0=wz[5];P1=led[10];    //显示-delay1ms();P0=wz[6];P1=led[h%10];delay1ms();P0=wz[7];P1=led[h/10];delay1ms();}s++;    //时间+if(s==60){s=0;m++;if(m==60){m=0;h++;    if(h>=23){h=0;}}}}
}

上个代码效果图

#include <REGX51.H>                //功能:用74HC138模块三位连接,显示时钟,类似上一个
void delay5ms()
{TH0=(65536-1000)/256;TL0=(65536-1000)%256;TR0=1;while(!TF0);TF0=0;}
unsigned char i,h=18,m=36,s=20;
int wz[8]={0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x00};
int led[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};
void main()
{TMOD=0x01;while(1){for(i=0;i<125;i++){ P0=wz[0];P1=led[s%10];delay5ms();       //显示秒P0=wz[1];P1=led[s/10];delay5ms();P0=wz[2];P1=led[10];    //显示-delay5ms();P0=wz[3];P1=led[m%10];delay5ms();P0=wz[4];               //显示分P1=led[m/10];delay5ms();P0=wz[5];P1=led[10];    //显示-delay5ms();P0=wz[6];P1=led[h%10];delay5ms();           //显示时P0=wz[7];P1=led[h/10];delay5ms();}s++;    //时间+if(s==60){s=0;m++;if(m==60){m=0;h++;    if(h>=23){h=0;}}}}
}

连线
周末休息了继续更新

#include<REGX51.H>               //功能:利用8*8点阵模块实现图形交替显示  191111
void delayms(unsigned int i)
{unsigned char k;while(i--)for(k=0;k<120;k++);               //120次空操作
}
void main()
{
unsigned char code led[]={0x00,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0x00};        //显示z
unsigned char code s[]={0x00,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x00};      //显示另一边的z
unsigned char w,i,z;while(1){ for(z=0;z<200;z++)                 //做200次后变另一个图形{w=0x01;for(i=0;i<8;i++)                   //8位行列{P0=w;                           //行数据送到P0口;P1=led[i];                       //列数据送到P1口;delayms(1);w<<=1;P0=0xff;                         //关显示}}for(z=0;z<200;z++){w=0x01;for(i=0;i<8;i++){P0=w;P1=s[i];delayms(1);w<<=1;P0=0xff;  }}}
}

今日份 学中断 更新

#include <REGX51.H> //功能:中断的利用;主程序是流水灯,按下K1之后中断,全亮3秒所有灯,然后继续变回流水灯
#include <INTRINS.H>    // 191113
sbit K1=P3^2;
void delay (unsigned char q)
{unsigned int i;while(q--){for(i=0;i<120;i++);}
}
void time50ms(unsigned char i)   //定义0.05秒
{unsigned int k;for(k=0;k<i;k++){TH0=(65536-50000)/256;TL0=(65536-50000)%256;TR0=1;while(!TF0);TF0=0;}
}
void main()
{TMOD=0X01;  //设置T0,定时,方式1EX0=1;        //外部中断0允许位IT0=1;       //下降沿触发PX0=1;EX1=1;IT1=0;EA=1;P0=0XFE;  //流水灯初值while(1){time50ms(10);P0=_crol_(P0,1);}
}
void int_0() interrupt 0
{unsigned char i,j;delay(10);j=P0;     //保护现场for(i=0;i<3;i++)        //全亮三秒 {P0=0x00;time50ms(20);      //一秒}P0=j; //恢复
}
void int_1() interrupt 2 using 2
{unsigned char i,j;j=P0;for(i=0;i<3;i++){P0=0x00;              //全亮time50ms(10);P0=0xff;             //全灭time50ms(10);}while(!K2);P0=j;
}

又一个周末,今日进阶中断,和上一个类似,不过主程序代码不同

#include <REGX51.H> //功能:中断的利用;主程序是交通灯,按下K1之后中断,A口亮绿灯,按K2为全红灯
#include <INTRINS.H>    // 191118
sbit K1=P3^2;
sbit K2=P3^3;
void delay (unsigned char q)
{unsigned int i;while(q--){for(i=0;i<120;i++);}
}
void time50ms(unsigned char i)   //定义0.05秒
{unsigned int k;for(k=0;k<i;k++){TH0=(65536-50000)/256;TL0=(65536-50000)%256;TR0=1;while(!TF0);TF0=0;}
}
void main()
{TMOD=0X01;  //设置T0,定时,方式1EX0=1;  //外部中断0允许位IT0=1;  //下降沿触发PX0=1;EX1=1;IT1=0;EA=1;P0=0XFE;  //流水灯初值while(1){P0=0xDE;  //A green B  reddelay(50000);delay(50000);delay(50000);delay(50000);delay(20000);P0=0xEE; // A yellow B red    delay(50000);P0=0xF3;   // A red B green delay(50000);delay(50000);delay(11000);P0=0xF5;    // A red B yellow delay(50000);}
}
void int_0() interrupt 0
{unsigned char i,j;delay(10);j=P0; for(i=0;i<4;i++){P0=0xDF; time50ms(20);   }P0=j;
}
void int_1() interrupt 2
{unsigned char i,j;delay(10);j=P0; for(i=0;i<8;i++){P0=0xf6;time50ms(20);}P0=j;
}

又一个周末休息,继续冲。之前学了中断的功能,这次把这个功能利用在时钟里,并实现一些效果

#include <REGX51.H>        //功能:时钟中断功能,可实现清零效果和暂停并恢复
void delay5ms()     //191118 1125 1127
{TH0=(65536-1000)/256;TL0=(65536-1000)%256;TR0=1;while(!TF0);TF0=0;}sbit K1=P3^2; sbit K2=P3^3;bit zt=0;
unsigned char count,h=11,m=9,s=20;
int wz[8]={0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x00};
int led[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};
void chushih()
{TMOD=0x11;TH1=(65536-50000)/256;TL1=(65536-50000)%256;TR1=1;   while(!TF1);TF1=0;EA=1;ET1=1;EX0=1;EX1=1;
}
void xianshi()
{P0=wz[0];P1=led[s%10];delay5ms();         //显示秒P0=wz[1];P1=led[s/10];delay5ms();P0=wz[2];P1=led[10];    //显示-delay5ms();P0=wz[3];P1=led[m%10];delay5ms();P0=wz[4];               //显示分P1=led[m/10];delay5ms();P0=wz[5];P1=led[10];    //显示-delay5ms();P0=wz[6];P1=led[h%10];delay5ms();           //显示时P0=wz[7];P1=led[h/10];delay5ms();}
void shizhongz() interrupt 3     //时间变化
{TH1=(65536-50000)/256;TL1=(65536-50000)%256;count++;if (count==20){count=0;s++;    //时间+if(s==60){s=0;m++;if(m==60){m=0;h++;   if(h>=23){h=0;}}} }
}
void qingl()  interrupt 0     //清零,按下P3^2对应的键即可
{  s=0;m=0;h=0;count=0;
}
void zant() interrupt 2     //暂停,按下P3^3对应的键即可,再按下可以恢复时间
{zt=~zt;if(zt==1) TR1=0;else TR1=1;
}
void main()      //主时钟程序
{chushih();while(1){     xianshi();                  }
}

又过一个周末,上周末LPL全明星太快乐了,继续学习

#include <REGX51.H>                  //功能:LED显示矩阵键盘上的案件号0~F
void delayms(unsigned  int i)              //延时   191202 1204
{unsigned char k;while(i--)for(k=0;k<120;k++);
}
char scan_key();
void main()
{unsigned char led[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};unsigned char i;P1=0xff;P0=0xff;while(1){i=scan_key();if(i==-1)continue;else P1=led[i];}
}
char scan_key()
{char i,temp,m,n;bit find=0;P2=0xf0;i=P0;i&=0x0f;if(i!=0x0f){delayms(10);i=P0;i&=0x0f;if(i!=0x0f){ for(i=0;i<4;i++){P2=0xfe<<i;temp=~P0;temp=temp&0x0f;if(temp!=0x00){m=i;find=1;switch(temp){case 0x01:n=0;break;case 0x02:n=1;break;case 0x04:n=2;break;case 0x08:n=3;break;default:break;}break;}}}}if(find==0) return -1;else return(n*4+m);
}

单片机结课,在时钟的基础上做了个课程设计

#include <REGX51.H>      //功能:利用3位74HC138的三位连接做的时钟
//大概功能有,设置闹钟,闹钟到点会响5秒,整点蜂鸣    191209 1211
sbit bee=P2^7;    // 蜂鸣器
sbit k2=P3^0;    // 闹钟设置键
sbit k1=P3^1;    //蜂鸣器清除键
sbit shih=P3^2;
sbit shim=P3^3;
char count,h=9,m=59,s=56;
sbit deng=P2^0;
char mm=0,hh=0,a=0,b=0;
int d=30;
int ms;
int wz[8]={0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x00};
char num[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void delay(int i)  //延时
{while(i--);
}
void int0_int() interrupt 0
{      if(a==0){delay(10);m=m+1;    //实时时间 分 修改 if(m==60){m=0;}}if(a==1){delay(10);mm=mm+1;  //闹钟时间 分 修改 if(mm==60){mm=0;}}
}   void int1_int() interrupt 2
{      if(a==0){delay(10);h=h+1;  //实时时间 小时 修改if(h==24){h=0;}}if(a==1){delay(10);hh=hh+1;  //闹钟时间 小时 修改if(hh==24){hh=0;}}
}   void timer_1() interrupt 3  //定时器中断 实时时间
{TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
count++;
if(count==20){count=0;s=s+1;if(s>=60){m=m+1;s=0;}if(m==60){h=h+1;m=0;}if(h==24){h=0;}       }
}void beep()     //蜂鸣器鸣叫
{   bee=0;delay(50);bee=1;delay(50);
}void main()
{   TMOD=0x10;  //初始化 ET1=1;EX0=1;EX1=1;EA=1;TR1=1;IT0=1;IT1=1;while(1)
{               if((mm==m)&&(hh==h)&&(s<5)&&(b==0))//判断闹钟时间是否到? {beep();  //蜂鸣器鸣叫10s ,k1键按下后清除 }if(k1==0)    //判断K1是否按下,(K1蜂鸣器清除键,b为标志 ) {b=1-b;while(k1==0);   //等待按键释放}if(k2==0)  //判断K2是否按下   (K2闹钟设置键,a为标志){a=a+1;if(a==2){a=0;}while(k2==0);}if((m==0)&&(s<1)&&(b==0))     //整点报时,响1秒{beep();} if(a==0)      //显示实时时间  {deng=0xff;  P0=num[s%10];      //段选接P0P1=wz[0];           //位选接P1delay(d); P0=num[s/10];P1=wz[1];delay(d);if(b==0){P0=0x40;}else{P0=0xc0;}P1=wz[2];delay(d);P0=num[m%10];P1=wz[3];   delay(d);P0=num[m/10];P1=wz[4];delay(d);P0=0x40;P1=wz[5];delay(d);P0=num[h%10];P1=wz[6];delay(d);P0=num[h/10];P1=wz[7];                     delay(d);}if(a==1)              //显示闹钟时间 {deng=0x00; P0=num[mm%10];P1=wz[0];delay(d); P0=num[mm/10];P1=wz[1];delay(d);           if(b==0){P0=0x40;}else{P0=0xc0;}P1=wz[2];delay(d); P0=num[hh%10];P1=wz[3];   delay(d);P0=num[hh/10];P1=wz[4];delay(d);P0=0x78;P1=wz[5];delay(d);P0=0x79;P1=wz[6];delay(d);P0=0x6d;P1=wz[7];                      delay(d);}}
}

51单片机学习案例——自学使用相关推荐

  1. 【51单片机】51单片机学习资料合集

    [51单片机]51单片机学习资料合集 资源文件架构 一次全部保存是保存不了的,超过了文件上限,需要分批保存,对于爱好学习和感兴趣学习51单片机的人来说是一波很不错的福利,希望大家多多支持. 51程序 ...

  2. 单片机c语言北航,【下载资料】《51单片机学习笔记》北航版

    原标题:[下载资料]<51单片机学习笔记>北航版 如果手机下载有问题,请移步至电脑端,链接:https://forum.mianbaoban.cn/t/topic/36906 内容简介 本 ...

  3. 51单片机学习--定时器--中断--串口通信

    51单片机学习–定时器–中断–串口通信 定时器–中断–串口通信 中断分类 定时器中断 外部中断 串口中断 基本概念 对于单片机来讲, 中断是指 CPU 在处理某一事件 A 时, 发生了另一事件 B, ...

  4. 51单片机学习笔记-1简介及点灯

    51单片机学习笔记 文章目录 51单片机学习笔记 1. 51单片机简介 1.1 安装软件 1.2 单片机简介 2. LED灯 2.1点亮一个LED 2.1.1原理分析 2.1.2 创建工程 2.2LE ...

  5. AutoLeaders控制组—51单片机学习笔记

    文章目录 AutoLeaders控制组-51单片机学习笔记 1.1单片机及开发板介绍 单片机介绍 单片机应用领域 STC89C52单片机 内部结构 开发板介绍 2.1点亮一个Led 新建工程 编程 认 ...

  6. 51单片机学习日记 | LCD1602黑块和闪烁问题的处理

    51单片机学习日记 芯片:STM89C516RD+ 开发板:普中A4 学习:By 江科大自化协 LCD1602模块问题的处理办法: 第一行黑块 原因是初始化有问题:LCD1602如果没有初始化就会出现 ...

  7. 51单片机学习之智能小车(1)

    说明 这是我学习一段时间51之后自己动手做的,比较简陋.此篇作为总结和复习,如有问题,请评论指出. 下篇:51单片机学习之智能小车(2) 小车概述(功能,所用模块) (1)蓝牙控制 通过手机上蓝牙串口 ...

  8. 51单片机学习笔记2 仿真器的使用及STC89Cxx简介

    51单片机学习笔记2 仿真器的使用及STC89Cxx简介) 一.连接步骤 1. 硬件连接 2. 安装软件驱动 3. 检查是否安装成功 二.仿真步骤 1. 打开一个51工程 2. 选择仿真设备 3. S ...

  9. 51单片机学习杂记——基于STC89C52RC

    51单片机学习杂记--基于STC89C52RC 我是看的b站郭天祥老师的课,说实话,我觉得我能力不是很够,所以记得很杂.废物了属于是. 接下来就是正文了 基本的元器件以及字母符号含义: 电容:帮助晶振 ...

  10. [51单片机学习笔记TWO]----蜂鸣器

    蜂鸣器音乐播放实验 首先应该了解一下蜂鸣器音乐播放的原理,在这里我只讲一下电磁式蜂鸣器驱动原理(还有一种是压电式蜂鸣器): 电磁式蜂鸣器驱动原理: 蜂鸣器发声原理是电流通过电磁线圈,使电磁圈产生磁场来 ...

最新文章

  1. p沟道mos管导通条件_10天电子入门-MOS管
  2. Question for the 3D printing lattice?
  3. boost::gil模块计算直方图的测试程序
  4. 树莓派 st-link master使用ST-LINK V2下载STM32程序 支持F0 F1 F2 等
  5. Introduce Null Object(引入Null对象)
  6. Java学习笔记基础(下)
  7. threadlocal使用_每日一题之 ThreadLocal
  8. 中石油企业微信私有版设置服务器,企业微信授权配置教程
  9. 蓝屏代码0x1000007e 错误分析
  10. 论一只爬虫的自我修养11:Scrapy框架之初窥门径
  11. jspstudy启动mysql失败_JspStudy配置Jspxcms安装教程,以及数据库设置;
  12. 2021-05-23
  13. Mybatis学习笔记_5、Mybatis动态SQL
  14. dmesg 命令详解
  15. NOIP2017+停课总结
  16. 同样的JS效果,有部分页面生效,有部分页面无效的原因(怪异模式)
  17. 深圳市建筑物矢量数据(Shp格式+带高度)
  18. Ubuntu 20.04 安装 Sublime
  19. 网络投票器软件摄影投票比赛链接制作手机制作投票链接手机投票
  20. pdf转换器哪个软件好?不能错过的几款软件!

热门文章

  1. mysql数据库备份机制_mysql备份机制有哪些
  2. LCD 1602学习
  3. Typora + PicGo + Github实现图床
  4. python练习题:u2.1求三角形斜边长度
  5. 印刷纸张尺寸,纸张种类规格
  6. 微软新搜索引擎“必应(bing)”
  7. pytorch 模型与tf模型转换
  8. Vue中如何实现Excel导入导出
  9. 啃完999页Java面试高频宝典,最新整理
  10. c语言函数声明大全及详解,C语言之函数的声明详解