当前位置:网络安全 > 51个单片机程序100个实例【51个单片机经典程序】

51个单片机程序100个实例【51个单片机经典程序】

  • 发布:2023-10-04 10:49

《单片机C语言程序设计实训100例——基于8051+Proteus仿真》第03章源码

100单片机C语言编程实例目录1

功能的使用和熟悉程度

示例3:使用单片机控制第一盏灯

示例4:使用单片机控制灯闪烁:了解单片机的工作频率

例五:将P1口状态分别发送至P0、P2、P3口:了解I/O口引脚功能

例6:使用P3口流萤本水点亮8位LED

例7:通过P3口地址

的操作流水线点亮8位LED

示例8:使用不同的数据类型来控制灯的闪烁时间

例9:使用P0口和P1口分别显示加减结果

示例10:使用P0和P1端口显示乘法结果

例11:使用P1、P0口显示除法运算结果

例12:使用自增操作控制端口P0的8位LED流向

例13:使用P0口显示逻辑“与”运算结果

例14:使用P0口显示条件运算结果

例15:使用P0口显示按位“异或”运算结果

例16:用P0显示左移运算结果

例17:“通用逻辑电路”实验

例18:使用右移运算流水线点亮P1端口的8位LED

例19:使用if语句控制P0端口8位LED的流向

例20:使用switch语句控制P0端口8位LED的点亮状态

例21:使用for语句控制蜂鸣器响的次数

例22:使用while语句控制LED

例23:使用do-while语句控制P0口8位LED流点亮

示例24:使用字符数组控制P0端口8位LED流点亮

例25:使用P0口显示字符串常量

例26:使用P0口显示指针运算结果

例27:使用指针数组控制P0端口8位LED流点亮

例28:使用数组指针控制P0口的8位LED点亮

示例29:使用P0和P1端口显示整数函数的返回值

示例 30:使用参数化函数控制端口 P0 的 8 位 LED 流量

示例 31:使用数组作为函数参数来控制管道模式

例32:使用指针作为函数参数,控制P0端口8位LED流点亮

例33:使用函数指针控制P1口灯型

示例34:使用指针数组作为函数参数来显示多个字符串

100单片机C语言编程实例目录2

例35:字符函数ctype.h的应用示例

例36:内部函数intrinsic.h的应用示例

例37:标准函数stdlib.h应用示例

例38:字符串函数string.h的应用示例

例39:宏定义应用例2

例40:宏定义应用例2

例41:宏定义应用例3

* 中断、定时器中断、定时器*中断、定时器*中断、定时器 /

例 42:使用定时器 T0 查询模式通过 8 位 P2 口控制 LED 闪烁

例43:使用定时器T1查询方法控制单片机发出1KHz音频

例44:将计数器T0的计数结果发送至P1口8位LED显示

例 45:利用定时器 T0 的中断控制 1 位 LED 闪烁

例46:利用定时器T0的中断实现长时间定时

例 47:利用定时器 T1 中断控制两个 LED 不同周期闪烁

例48:利用计数器T1的中断控制蜂鸣器发出1KHz音频

例49:利用定时器T0的中断播放《欲望》主题曲

例50-1:输出50个矩形脉冲

例 50-2:计数器 T0 对外部脉冲数进行计数

例 51-2:定时器 T0 的模式 2 测量正脉冲宽度

例52:利用定时器T0控制输出不同高低宽度的矩形波

例53:使用外部中断0的中断方式采集数据

例 54-1:输出负脉冲宽度为 200 微秒的方波

示例 54-2:测量负脉冲宽度

例55:模式0控制流水灯循环点亮

例 56-1:数据发送程序

例56-2:数据接收程序

例57-1:数据发送程序

例57-2:数据接收程序

示例 58:微控制器向 PC 发送数据

示例 59:单片机从 PC 接收数据

*数码管显示*数码管显示数码管显示数码管显示*/

例60:用LED数字显示数字5

例61:使用LED数码管循环显示数字0~9

例62:使用数码管缓慢动态扫描并显示数字“1234”

例63:利用LED数码管伪静态显示数字1234

例64:利用数码管显示动态检测结果

示例 65:数字秒表设计

例66:数字时钟设计

例67:用LED数码管显示计数器T0的计数值

例68:静态显示数字“59”

100个单片机c语言编程实例目录3

键盘控制*键盘控制* *键盘控制*键盘控制*/

例69:无软件去抖动的独立键盘输入实验

示例70:使用软件去抖的独立键盘输入实验

例71:CPU控制的独立键盘扫描实验

例72:定时器中断控制的独立键盘扫描实验

例73:独立键盘控制4级变速跑灯

例74:独立键盘按键功能扩展:“一当四”

例75:独立键盘时间调节的数字时钟实验

例76:独立键盘控制步进电机实验

例77:矩阵键盘键值数码管显示实验

//例78:矩阵键盘按键音

例79:简易电子键盘

例80:矩阵键盘实现的电子密码锁

LCD*LCD*LCD**LCD*LCD*LCD*/

示例 81:在 LCD 上显示字符“A”

例82:使用LCD向右循环显示“欢迎来到中国”

例83:利用LCD及时显示检测结果

例84:LCD时钟设计

*部分芯片的使用*24c02 DS18B20 X5045 ADC0832 DAC0832 DS1302红外遥控器/

例85:将数据“0x0f”写入AT24C02然后读出并发送给P1口显示

例86:将按键次数写入AT24C02,然后读出并显示在1602LCD上

示例 87:对连接到 I2C 总线的多个 AT24C02 进行读写操作

例88:基于AT24C02的多机通讯读取程序

例89:基于AT24C02的多机通讯程序

例90:DS18B20温度检测及其LCD显示

例91:将数据“0xaa”写入X5045然后读出并发送给P1口显示

例92:将流水灯控制代码写入X5045,读出P1口显示

示例93:连接到SPI总线的多个X5045的读写操作

例94:基于ADC0832的数字电压表

例95:使用DAC0832产生锯齿波电压

例96:使用P1口显示红外遥控器按键值

例97:红外遥控控制继电器

例98:基于DS1302的日历时钟

例99:单片机数据发送程序

示例 100:电机转速计设计

模拟霍尔脉冲

单片机c语言一百个例子

[img]

c51单片机程序示例

#includereg51.h

#define uchar 无符号字符

uchar tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00}; //0前往山搜藻9

uchar num,cnt,disn;

uchar keyval,磁盘;

uchar led[]={1,2,3,4};

void dealdat(uchar a)

{

led[0]=0;

led[1]=0;

led[2]=0;

led[3]=0;

led[a]=磁盘;

}

无效延迟(unsigned int a)

{

无符号整型 i,j;

for(i=0;ia;i++)

for(j=0;j1000;j++);

}

void t0isr() 中断 1

{

TH0=(65536-5000)/256;

TL0=(65536-5000)%256;

开关(编号)

{

情况0:P2=0x01;中断;

情况1:P2=0x02;break;

情况2:P2=0x04;break;

情况3:P2=0x08;break;

默认:break;

}

P0=~tab[led[num]];

num++;

num=0x03;

cnt++;

if(cnt100)

{

cnt=0;

disn++;

disn%=4;

dealdat(disn);

}

}

uchar kbscan(无效)

{

无符号字符sccode,重新编码;

P3=0x0f; //发送0扫描,列输入

if ((P3 0x0f) != 0x0f) //A键被按下

{

//延迟(20); //延迟去抖

如果 ((P30x0f)!= 0x0f)

{

sccode = 0xef; //逐行扫描初始值

while((sccode0x01)!=0)

{

P3=sccode;

if((P30x0f)!=0x0f)

{

重新编码=(P30x0f)|0xf0;

返回((~sccode)+(~重新编码));

}

         其他

sccode=(sccode1)|0x01;

}

}

}

返回0; //无键按下,返回0

}

void getkey(void)

{

无符号字符密钥;

key=kbscan();

if(key==0){keyval=0xff;return;}

开关(按键)

{

案例 0x11:keyval=7;break;

案例 0x12:keyval=4;break;

案例 0x14:keyval=1;break;

案例 0x18:keyval=10;break;

案例 0x21:keyval=8;break;

案例 0x22:keyval=5;break;

案例 0x24:keyval=2;break;

案例 0x28:keyval=0;break;

案例漏扒0x41:keyval=9;break;

案例 0x42:keyval=6;break;

案例 0x44:keyval=3;break;

案例 0x48:keyval=11;break;

案例 0x81:keyval=12;break;

案例 0x82:keyval=13;break;

案例 0x84:keyval=14;break;

case 逗雀0x88:keyval=15;break;

默认:keyval=0xff;break;

}

}

main()

{

TMOD=0x11;

TH0=(65536-5000)/256;

TL0=(65536-5000)%256;

TR0=1;

ET0=1;

EA=1;

同时(1)

{

getkey();

if(keyval!=0xff)disk=keyval;

延迟(10);

}

}

一个非常简单的51单片机C语言流水灯程序

1。轻骑用51单片机C语言实现8个流水灯的循环,左移3次,再右移3次。

日常:

#includereg51.h //51单片机头文件

#include intrins.h //包含左右循环移位子函数的库

#define uint unsigned int //宏定义

#define uchar unsigned char //宏定义

嘟嘟声=P2^3;

void delay(uint z) //延迟函数,z的值为该函数的延迟ms,如delay(200);延迟约200ms。

{ //延迟(500);约500ms延迟。

uint x,y;

对于(x=z;x0;x--)

for(y=110;y0;y--);

}

void main() //主函数

{

uchar a,i,j;

while(1) //大循环

 {

0 for (j = 0; j3; j ++) for (i = 0; i8; i ++) // 三倍

                                  {

     P1=a;

               延迟(50); //延迟50毫秒

侧孔延时(50); //又延迟50毫秒

O A = _CROL_ (a, 1); // 将A变量循环左移一位

}

a=0x7f;

for(j=0;j3;j++) for(i=0;i8;i++) 答案 //右移三次

                                  {

     P1=a;

               延迟(50); //延迟50毫秒

                延迟(50); //再延迟50毫秒

}

}

2。 51单片机是所有兼容Intel 8031指令系统的单片机的统称。该系列微控制器的始祖是Intel的8031微控制器。后来随着Flash rom技术的发展,8031微控制器取得了长足的进步,成为应用最广泛的8位微控制器之一。其代表型号是ATMEL公司的AT89系列。广泛应用于工业测量和控制系统中。很多公司都推出了51系列的兼容机型,未来很长一段时间都会占据很大的市场。 51单片机是一种基本的入门级单片机,也是应用最广泛的一种。

100个单片机c语言编程实例

51单片机基础知识 C语言编程实例:51单片机编程基础 单片机外部结构:香榭 1.DIP40双列直插插头; 2、4个8位准双向I/O引脚P0、P1、P2、P3引脚; (用作I/O输入时,必须先输出高电平) 3、电源VCC(PIN40)和地线GND(PIN20); 4.高电平复位RESET(PIN9); (VCC和RESET连接10uF电容,可以实现上电复位) 5、内置振荡电路,只需将外部晶振连接到X1(PIN18)和X0(PIN19)即可; (频率为主频的12倍) 6、程序配置EA(PIN31)接高电平VCC; (运行单片机内部ROM中的程序) 7、P3支持第二个功能:RXD、TXD、INT0、INT1、T0、T1单片机内部I/O组件:(学习单片机的目的其实是为了编程控制以下I/O器件完成指定任务) 1. 4个8位通用I/O口,分别对应引脚P0、P1、P2、P3; 2、两个16位定时器计数器; (TMOD、TCON、TL0、TH0、TL1、TH1) 3、串行通讯接口一个; (SCON,SBUF) 4.中断控制器; (IE、IP) 对于AT89C52微控制器,头文件AT89x52.h给出了SFR特殊功能控制寄存器所有端口的定义。 C语言编程基础: 1、字节0x5a的十六进制表示:二进制为01011010B; 0x6E 为 01101110。 2. 如果将 16 位二进制数赋值给 8 位字节变量,则会自动截断为低 8 位,而高 8 位将被丢弃。 3、++var表示先将变量var加一; var-表示将变量减一,然后再减一。 4. x |= 0x0f;表示为 x = x | 0x0f; 5. TMOD = ( TMOD 0xf0 ) | 0x05;表示将值0x5赋给变量TMOD的低四位,而不改变TMOD的高四位。 6. 同时(1);表示无限期地执行该语句,即无限循环。语句后面的分号表示空循环体,即{;}在某个引脚上输出高电平的编程方法:(如P1.3(PIN4)引脚)代码1.#include AT89x52.h //这个header 文件包含单片机内部资源的符号定义,包括P1.3 2. void main(void) //void 表示没有输入参数,也没有函数返回值。这就进入了单片机操作的复位入口3.{4.P1_3。 = 1;//给P1_3赋值1,P1.3引脚可以输出高电平VCC 5. While(1); //无限循环,相当于LOOP: goto LOOP; 6. } 注意:P0 各引脚必须输出高电平时,必须在 VCC 电源上外接上拉电阻(如 4K7)。某个引脚输出低电平的编程方法:(如P2.7引脚) 代码1. #include AT89x52.h //该头文件包含单片机内部资源的符号定义,包括P2.7 2. void main(void) //void表示函数没有输入参数,也没有返回值。这就进入复位入口3. { 4. P2_7 = 0; //将 0 分配给 P2_7,引脚 P2。 7 可输出低电平GND 5. While(1); //无限循环,相当于LOOP: goto LOOP; 6. } 在某个引脚上输出方波的编程方法:(如P3.1引脚) 代码1. #include AT89x52.h //该头文件包含单片机内部资源的符号定义,包括P3。 1 2. void main(void) //void表示没有输入参数,也没有函数返回值,进入单片机操作复位入口 3. { 4. While( 1 ) //非0表示true,如果true,执行以下循环体中的语句 5. { 6. P3_1 = 1; //给P3_1赋值1,P3.1引脚可以输出高电平VCC 7. P3_1 = 0; //给P3_1赋值0,P3.1引脚可以输出低电平GND 8. } //因为一直为真,所以不断输出高、低、高、低...,从而形成方波 9 . } 将某个引脚的输入电平反相后,从另一个引脚输出:(例如,P0.4 = NOT(P1.1)) 代码1. #include AT89x52. h //头文件包含单片机内部资源的符号定义,包括P0.4和P1.1 2. void main(void) //void表示没有输入参数,也没有函数返回值,进入单片机的操作复位入口 3. { 4. P1_1 = 1; //初始化。 P1.1作为输入,必须输出高电平 5. While(1) //非零表示真。如果为true,则执行下面循环体的语句 6. { 7. if(P1_1 == 1) //读取P1.1表示将P1.1视为输入。如果P1.1输入高功率VCC 电平 8。{ P0_4 = 0; } //给P0_4赋值0,P0.4引脚可以输出低电平GND 2 51单片机C语言编程实例9. else //否则,P1.1输入为低电平GND 10. //{ P0_4 = 0; } //给P0_4赋值0,P0.4引脚可以输出低电平GND 11. { P0_4 = 1; } //给P0_4赋值1,P0.4引脚可以输出高电平VCC 12。 } //由于一直为真,所以P0.4的输出电平根据P1的输入状态不断变化.1 13. } 将某个端口的8个引脚的输入电平设置为低电平 将四位反转后,从另一个端口的8个引脚输出:(例如,P2 = NOT(P3)) 代码1.#include AT89x52。 h //这个头文件包含了单片机内部资源的符号定义,包括P2和P3 2. void main(void) //void表示没有输入参数,也没有函数返回值。这样就进入复位项3. { 4. P3 = 0xff; //初始化。作为输入,P3必须输出高电平,同时向P3端口5的8个引脚输出高电平。 while(1) //非0表示true,如果true则执行下面的语句循环体 6. { //取反方式为XOR 1,非取反方式为XOR 0 7. P2 = P3^0x0f //读取P3即认为P3为输入,低四位为XOR 1 ,即取反,然后输出8。 } //由于一直为真,所以P3不断取反,输出到P2 9. } 注:一个字节的8位D7、D6到D0输出到P3。 7、P3.6至P3.0,例如P3=0x0f,则P3.7、P3.6、P3.5、P3.4这四个引脚均输出低电平,而P3.3、P3.2 、P3.1 和 P3。 0 所有四个引脚均输出高电平。同样,输入一个端口P2意味着将P2.7、P2.6至P2.0读入8位D7、D6至D0的一个字节中。第一节:单数码管按键显示 最小单片机系统硬件原理接线图: 1、接电源:VCC(PIN40)、GND(PIN20)。添加0.1uF 去耦电容 2. 连接晶振:X1(PIN18)、X2(PIN19)。注意晶振频率(选择12MHz)和辅助电容30pF。 3. 连接复位:RES (PIN9)。连接上电复位电路和手动复位电路,分析复位的工作原理。 4、连接配置:EA(PIN31)。解释一下原因。发光二极管的控制:MCU I/O输出。将发光二极管LED的正极(阳极)连接到P1.1,将LED的负极(阴极)连接到地GND。只要P1.1输出高电平VCC,LED就会正向导通(点亮时LED上的压降大于1V),电流就会流过LED,LED就会点亮。实际上,由于P1.1的高电平输出电阻为10K,起到了输出限流的作用,所以流过LED的电流小于(5V-1V)/10K=0.4mA。只要P1.1输出低电平GND,实际上小于0.3V,LED就无法点亮,LED也不会亮。双键开关输入:先输入,输出高电平。一个按钮KEY_ON连接在P1.6和GND之间,另一个按钮KEY_OFF连接在P1.7和GND之间。按 KEY_ON 后,LED 亮起,按 KEY_OFF 后,LED 熄灭。按住 LED 可同时亮起一半。 LED 保持与松开按键时相同的状态,即 ON 亮起,OFF 熄灭。代码 1. #include at89x52.h 2. #define LED P1^1 //用符号 LED 替换 P1_1 3. #define KEY_ON P1^6 //用符号 KEY_ON 替换 P1_6 4. #define KEY_OFF P1^7 //使用符号KEY_OFF代替P1_7 5. void main(void) //单片机复位后的执行入口,void表示空,无输入参数,无返回值 6. { 7. KEY_ON = 1; //作为输入,先输出高电平,然后下一个KEY_ON,P1.6接地为0,否则输入为1 8. KEY_OFF = 1; //作为输入,先输出高,然后KEY_OFF,P1.7接地为0,否则输入为1 9. while( 1 ) //总是true,所以会一直循环执行里面的所有语句10 以下的括号。 { 11. if( KEY_ON==0 ) LED=1; // KEY_ON已连接,如图P1.1输出高电平,LED点亮12。 if( KEY_OFF==0 ) LED=0; //KEY_OFF已接通,P1.1输出低电平,LED熄灭。 } //按键释放后,LED不会被赋值,因此LED保持最后按下的键的状态。状态。 14. //同时按下时,LED不断亮灭,各占一半时间,交替频率很快。由于人眼的惯性,它看起来是半亮的。 15. } 数码管的连接方法及驱动原理,一个七段数码管实际上是由8个发光二极管组成,其中7个组成了数字8的七段笔画,所以称为七段数码管,其余1个发光二极管作为小数点。作为习惯,标记八个发光二极管:a、b、c、d、e、f、g、h。对应8的上图按顺时针方向排列,中间图为g,小数点为h。我们通常将每个二极管对应一个字节的8位,a(D0), b(D1), c(D2), d(D3), e(D4), f(D5), g(D6) , h ( D7),对应的8个发光二极管正好连接到单片机的一个Pn端口的8个引脚上,这样单片机就可以通过该引脚输出高低电平来控制8个发光二极管的亮灭,从而显示各种数字和符号;对应字节,引脚连接为:a(Pn.0)、b(Pn.1)、c(Pn.2)、d(Pn.3)、e(Pn.4)、f(Pn.5)、 g(Pn.6),h(Pn.7)。如果8个发光二极管的负极(阴极)连接在一起作为数码管的一个引脚,则这种数码管称为共阴极数码管,公共引脚称为共阴极。 8个正极 是段极。否则,如果正极(阳极)连接在一起,则称为共阳极数码管,公共引脚称为共阳极,8个负极为段极。以单个共阴数码管为例,将段极接到某个端口Pn,共阴接到GND,即可写入十六进制码

对应的七段码表字节数据51单片机,定时器模式1下1s计时,如何编程

这个厚厚的家庭钥匙程序来自《单片机C语言程序穗猜设计实训100例——基于8051+Proteus仿真》没有中断。

#include reg52.h

#include intrins.h

#define uchar 无符号字符

#define uint 无符号整数

void main()

{

uchar T_Count = 0;

P0 = 0xfe;

P2 = 0xfe;

TMOD=0x10; //定时器1模式1

TH1 = (65535-50000)/256;//时序50000us=50ms

TL1 = (65535-50000)%256;

TR1 = 1;//启动燕桥定时器1

同时(1)

{

if(TF1== 1)//查询模式计时时间到后,TF1=1

{

TF1 = 0;

TH1 = (65535-50000)/256;

TL1 = (65535-50000)%256;

if(++T_Count == 20)//50ms*20=1000ms

{

P0 = _crol_(P0,1);

P2 = _crol_(P2,1);

T_Count = 0;

}

}

}

}

51单片机程序100个实例和51单片机经典程序的介绍到此结束。您找到您需要的信息了吗?如果您想了解更多相关信息,请记得添加书签并关注本网站。

相关文章