首页编程51单片机c语言编程实例,c语言必背100代码

51单片机c语言编程实例,c语言必背100代码

编程之家2026-05-19818次浏览

大家好,如果您还对51单片机c语言编程实例不太了解,没有关系,今天就由本站为大家分享51单片机c语言编程实例的知识,包括c语言必背100代码的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

51单片机c语言编程实例,c语言必背100代码

51单片机C语言程序

//你原来的b2,b2都是死循环,这是不行的,只有主函数才可以死循环。

//你的主函数结构也有问题。

//为你增加了一个按键检测的函数。

//下列程序通过了实验测试。

//b1输出的周期大约0.9s。

//b2输出的周期大约0.6s。

51单片机c语言编程实例,c语言必背100代码

//K为触动开关,reg为红灯,bice为绿灯,b1、b2各为一个方波,

//按第一次触动开关时红灯亮、b1输出,

//按第二次绿灯亮、为b2输出,

//按第三次都关闭.

#include<reg51.h>

#define uint unsigned int

51单片机c语言编程实例,c语言必背100代码

#define uchar unsigned char

uint a;

void b1();

void b2();

sbit t= P1^0;

sbit k= P3^5;

sbit reg= P3^3;

sbit bice= P3^2;

void delay(uchar z)

{

uint x,y;

for(x= z; x> 0; x--) for(y= 110; y> 0; y--);

}

bit key()

{

bit kkk;

kkk= k;//读入按键.

if(kkk== 1) return 0;//没有按下.

delay(5);//延时.

if(k== kkk) return 1;//两次相等.

return 0;

}

void main()

{

while(1){

P3= 0xff;

while(!key());//静等按下第一次.

reg= 0;

bice= 1;

while(!key()) b1();//没有按下第二次就循环等待.

reg= 1;

bice= 0;

while(!key()) b2();//没有按下第三次就循环等待.

}

}

void b1()

{

P1= 0xfe; a= 50000; while(a--);

P1= 0xff; a= 50000; while(a--);

}

void b2()

{

P1= 0xfe; a= 30000; while(a--);

P1= 0xff; a= 30000; while(a--);

}

51单片机C语言编程

// 51单片机C语言编程,这个时钟+秒表可以参考一下。

#include<reg51.h>

#define uchar unsigned char

#define uint unsigned int

sbit qingling=P1^0;//清零

sbit tiaofen=P1^1;//调分

sbit tiaoshi=P1^2;//调时

sbit sounder=P1^7;//naozhong

uint a,b;

uchar hour,minu,sec,//时钟

hour0,minu0,sec0,//秒表

hour1,minu1,sec1;

h1,h2,m1,m2,s1,s2,//显示位

k,s;//状态转换标志

uchar code select[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};

uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

/*****************函数声明***********************/

void keyscan();

void init();

void delay(uchar z);

void display(uchar,uchar,uchar);

void sounde();

/*****************主函数*************************/

void main()

{

init();

while(1)

{

while(TR1)

{

keyscan();//扫描函数

while(s==1)//s是状态标志,当s=0时,闹钟取消。s=1时,设定闹钟时间(也是通过调时,调分函数);

{//s=2时,闹钟工作,时间与设定时刻一致时,闹钟响(一分钟后自动关闭,可手动关闭)。再次切换,s=0.

keyscan();//s状态切换(0-》1-》2-》0)通过外部中断1实现。

display(hour1,minu1,sec1);//闹钟时刻显示

}

display(hour0,minu0,sec0);//时钟表显示

while(k)/*k是秒表状态(0-》1-》2-》0)通过外部中断0实现。0秒表关;1秒表从零计时;2秒表停,显示计时时间*/

{

display(hour,minu,sec);//秒表显示

}

}

}

}

/*****************初始化函数***********************/

void init()

{

a=0;

b=0;

k=0;

s=0;

hour0=0;

minu0=0;

sec0=0;

hour=0;

minu=0;

sec=0;

hour1=0;

minu1=0;

sec1=0;

TMOD=0x11;//定时器0,1工作于方式1;赋初值

TH0=(65536-5000)/256;

TL0=(65536-5000)%256;

TH1=(65536-50000)/256;

TL1=(65536-50000)%256;

EA=1;

EX0=1;//秒表中断

EX1=1;//闹钟设定中断

ET0=1;

ET1=1;

IT0=1;//边沿触发方式

IT1=1;

PX0=1;

PX1=1;

TR0=0;//初始,秒表不工作

TR1=1;//时钟一开始工作

}

/*****************定时器0中断*************/

void timer0_int() interrupt 1//秒表

{

TH0=(65536-5000)/256;

TL0=(65536-5000)%256;

a++;

if(a==2)

{

a=0;

sec++;

if(sec==100)

{

sec=0;//毫秒级

minu++;

if(minu==60)

{

minu=0;//秒

hour++;

if(hour==60)//分

{

hour=0;

}

}

}

}

}

/*************外部中断0中断函数************/

void ex0_int() interrupt 0

{

k++;

if(k==3)

k=0;

if(k==1)

{

TR0=~TR0;

if(TR0==1)

{

hour=0;

minu=0;

sec=0;

}

}

if(k==2)

{

TR0=~TR0;

}

}

/*************外部中断1中断函数************/

void ex1_int() interrupt 2

{

s++;

if(s==3)

s=0;

}

/*************定时器1中断****************/

void timer1_int() interrupt 3//控制时钟工作

{

TH1=(65536-50000)/256;

TL1=(65536-50000)%256;

if(s==2)

{

if(hour1==hour0&& minu0==minu1)

sounde();

}

b++;

if(b==20)

{

b=0;

sec0++;

if(sec0==60)

{

sec0=0;

minu0++;

if(minu0==60)

{

minu0=0;

hour0++;

if(hour0==24)

hour0=0;

}

}

}

}

/*************键盘扫描****************/

void keyscan()

{

if(s==1)

{

if(qingling==0)

{

delay(10);

if(qingling==0)

{

sec1=0;

minu1=0;

hour1=0;

}

}

if(tiaofen==0)

{

delay(10);

if(tiaofen==0)

{

minu1++;

if(minu1==60)

{

minu1=0;

}

while(!tiaofen);

}

}

if(tiaoshi==0)

{

hour1++;

if(hour1==24)

{

hour1=0;

}

while(!tiaoshi);

}

}

else//调整时钟时间

{

if(qingling==0)

{

delay(10);

if(qingling==0)

{

sec0=0;

minu0=0;

hour0=0;

}

}

if(tiaofen==0)

{

delay(10);

if(tiaofen==0)

{

minu0++;

if(minu0==60)

{

minu0=0;

}

while(!tiaofen);

}

}

if(tiaoshi==0)

{

hour0++;

if(hour0==24)

{

hour0=0;

}

while(!tiaoshi);

}

}

}

/*************显示函数****************/

void display(uchar hour,uchar minu,uchar sec)

{

h1=hour/10;

h2=hour%10;

m1=minu/10;

m2=minu%10;

s1=sec/10;

s2=sec%10;

P0=0xff;

P2=table[h1];

P0=select[7];

delay(5);

P0=0xff;

P2=table[h2];

P0=select[6];

delay(5);

P0=0xff;

P2=0x40;;

P0=select[5];

delay(5);

P0=0xff;

P2=table[m1];

P0=select[4];

delay(5);

P0=0xff;

P2=table[m2];

P0=select[3];

delay(5);

P0=0xff;

P2=0x40;

P0=select[2];

delay(5);

P0=0xff;

P2=table[s1];

P0=select[1];

delay(5);

P0=0xff;

P2=table[s2];

P0=select[0];

delay(5);

}

/*************闹钟函数****************/

void sounde()

{

sounder=~sounder;

}

/*************延时函数****************/

void delay(uchar z)

{

int x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

51单片机C语言开发与实例的目录

第1章MCS-51单片机与C语言

1.1MCS-51单片机的特点

1.1.1MCS-51单片机简介

1.1.2MCS-51单片机的内部结构

1.1.3MCS-51单片机的存储器组织

1.2汇编语言

1.3C语言

1.4单片机汇编语言与C语言程序设计对照

1.5汇编语言和C语言混合编程

1.5.1在C51中嵌入汇编

1.5.2C程序中调用汇编功能程序

1.5.3汇编程序调用C程序

第2章KeilC51的数据结构

2.1KeilC51

2.2数据类型

2.3存储种类及存储区

2.3.1整型常量

2.3.2字符型常量

2.3.3字符串常量

2.3.4位标量

2.4变量

2.4.1变量的定义

2.4.2存储器类型

2.4.3存储器模式

2.4.4重新定义数据类型

2.5数组

2.6指针

2.7结构

2.8联合

2.9枚举

第3章KeilC51程序设计

3.1预处理

3.2运算符与表达式

3.3控制流语句

3.3.1条件语句

3.3.2while循环

3.3.3do-while循环

3.3.4for循环

3.3.5goto语句

3.3.6switch语句

3.3.7Break语句和continue语句

3.3.8返回语句return

3.4函数

3.4.1定义函数

3.4.2调用函数

3.4.3中断服务函数

3.4.4函数的递归调用与再入函数

第4章KeilC51集成开发环境

4.1KeilC51安装

4.2μVision3集成开发环境

4.3μVision3的栏目和窗口

4.4创建项目

4.5简单的程序调试

4.6含有多个文件的项目

4.7代码优化

4.8技巧和窍门

4.9KeilC编译器常见警告与错误信息的解决方法

第5章用KeilC51开发8051单片机内部资源

5.1用KeilC51开发输入/输出端口

5.1.1输入/输出端口简介

5.1.2输出端口应用实例

5.1.3输入端口实例

5.2用KeilC51开发定时器/计数器

5.2.1定时器/计数器简介

5.2.2控制和状态寄存器

5.2.3定时器/计数器设置实例

5.2.4定时器/计数器2

5.2.5编程实例

5.3中断系统编程

5.3.1中断系统

5.3.2中断系统的控制寄存器

5.3.3中断的响应过程

5.3.4中断实例

5.4用KeilC51开发串行口

5.4.1数据通信的基本概念

5.4.2MCS-51的串行口控制寄存器

5.4.3工作方式

5.4.4数据传输率的确定

5.4.5串行通信实例

第6章单片机的资源扩展

第7章8051单片机的系统设计

第8章8051单片机程序固化方法

第9章单片机的断电保护

第10章单片机与PC机通信

第11章在系统编程和在应用中编程

第12章单片机之间的通信

第13章I2C总线接口技术

第14章用C51开发线切割机床控制器

第15章步进电机驱动

第16章红外器件应用

附录AMCS-51指令表

附录BKeilC51的库函数

关于51单片机c语言编程实例,c语言必背100代码的介绍到此结束,希望对大家有所帮助。

在线crm网站建站(crm官网)java培训多少钱?java线下培训有必要吗