c51单片机实例下载大全
51单片机典型开发实例大全

uCOSII 工作核心原理是:近似地让最高优先级的就绪任务处于运行状态。
——uCOS-II 在 51 单片机上的移 植
引言:随着各种应用电子系统的复杂化和系统实时性需求的提高,并伴 随应用软件朝着系统化方向发展的加速,在 16 位/32 位单片机中广泛使用了 嵌入式实时操作系统。然而实际使用中却存在着大量 8 位单片机,从经济性 考虑,对某些应用场合,在 8 位 MCU 上使用操作系统是可行的。从学习操作 系统角度,uC/OS- II for 51 即简单又全面,学习成本低廉,值得推广。
uC/OS-II 原理:
操作系统将在下面情况中进行任务调度:调用 API 函数(用户主动调用), 中断(系统占用的时间片中断 OsTimeTick(),用户使用的中断)。
调度算法书上讲得很清楚,我主要讲一下整体思路。
(1) 在调用 API 函数时,有可能引起阻塞,如果系统 API 函数察觉到 运行条件不满足,需要切换就调用 OSSched()调度函数,这个过程是系统自 动完成的,用户没有参与。OSSched()判断是否切换,如果需要切换,则此 函数调用 OS_TASK_SW()。这个函数模拟一次中断(在 51 里没有软中断,我 用子程序调用模拟,效果相同),好象程序被中断打断了,其实是 OS 故意制 造的假象,目的是为了任务切换。既然是中断,那么返回地址(即紧邻 OS_TASK_SW()的下一条汇编指令的 PC 地址)就被自动压入堆栈,接着在中 断程序里保存 CPU 寄存器(PUSHALL)……。堆栈结构不是任意的,而是严格 按照 uCOSII 规范处理。OS 每次切换都会保存和恢复全部现场信息(POPALL), 然后用 RETI 回到任务断点继续执行。这个断点就是 OSSched()函数里的紧 邻 OS_TASK_SW()的下一条汇编指令的 PC 地址。切换的整个过程就是,用户 任务程序调用系统 API 函数,API 调用 OSSched(),OSSched()调用软中 断 OS_TASK_SW()即 OSCtxSw,返回地址(PC 值)压栈,进入 OSCtxSw 中断 处理子程序内部。反之,切换程序调用 RETI 返回紧邻 OS_TASK_SW()的下一 条汇编指令的 PC 地址,进而返回 OSSched()下一句,再返回 API 下一句, 即用户程序断点。因此,如果任务从运行到就绪再到运行,它是从调度前的 断点处运行。
51单片机C语言实例(350例)Proteus仿真和代码都有

51单片机C语言实例(350例)Proteus仿真和代码都有51单片机C语言实例(400例)所有实例程序均经测试过,适合新手学习。
1-IO输出-点亮1个LED灯方法1 10-LED循环左移100-24c02记忆开机次数101-24c02存储上次使用中状态102-DS1302 时钟原理103-DS1302可调时钟104-DS1302时钟串口自动更新时间105-1602液晶显示DS1302时钟106-字库ST7920 12864液晶基础显示107-按键 12864显示108-PCF8591 1路AD数码管显示109-PCF8591 4路AD数码管显示11-LED循环右移110-PCF8591 DA输出模拟111-PCF8591 输出锯齿波112-PCF8591 1602液晶显示113-串口通讯114-串口通讯中断应用115-RS485基本通讯原理116-红外接收原理117-红外解码数码管显示118-红外解码1602液晶显示119-红外发射原理12-查表显示LED灯120-红外收发测试121-双红外发射避障原理测试122-1个18B20 温度传感器数码管显示123-1个18b20温度传感器1602液晶显示124-多个18b20温度传感器1602液晶显示125-超温报警测试126-温度可调上下限1602126-温度可调上下限1602显示127-PS2键盘输入1602液晶显示128-双色点阵1种颜色显示测试129-双色点阵2种颜色显示测试13-双灯左移右移闪烁130-双色点阵显示特定图形131-双色点阵交替图形显示132-双色点阵双色交替动态显示133-热敏电阻测试数码管显示134-光敏电阻测试数码管显示135-自动调光测试136-串转并数字芯片测试137-非门数字芯片测试138-电子琴139-实用99分钟倒计时器14-花样灯140-外部频率测试141-定时做普通时钟可调142-1602液晶显示的密码锁143-实用密码锁144-1602液晶显示的计算器145-秒表146-串口测温电脑显示147-交通灯测试148-点阵模拟电梯上行下行149-点阵流动广告模拟15-PWM调光150-综合测试程序151-12位AD_DS1621与12864液晶152-闪烁灯一153-闪烁灯二154-流水灯A155-51单片机12864大液晶屏proteus仿真156-流水灯B157-数码管显示158-12864LCD显示计算器键盘按键实验159-数码管显示(锁存器)16-共阳数码管静态显示160-数码管动态显示161-数码管滚动显示162-数码管字符显示163-独立按键164-矩阵键盘165-矩阵键盘(LCD)166-用DS1302与12864LCD设计的可调式中文电子日历167-定时器的使用(方式1)168-12864LCD图形滚动演示169-用PG12864LCD设计的指针式电子钟17-1个共阳数码管显示变化数字170-定时器的使用(方式2)171-外部中断的使用172-定时器和外部中断173-开关控制12864LCD串行模式显示174-点阵显示175-液晶1602显示176-12864带字库测试程序177-串行12864显示178-遥控键值解码-12864LCD显示179-液晶12864并行18-单个数码管模拟水流180-液晶12864并行2181-串口发送试验182-串口接收试验183-串口接收(1602)184-蜂鸣器发声185-直流电机调速186-蜂鸣器间断发声187-lcd-12864应用188-继电器控制189-直流电机调速19-按键控制单个数码管显示190-步进电机191-存储AT24C02192-PCF8591T AD实验193-PCF8591T芯片DA实验194-温度采集DS18B20195-EEPROM_24C02196-12864LCD显示24C08保存的开机画面197-红外解码198-12864LCD显示EPROM2764保存的开机画面199-时钟DS1302(LCD)2-IO输出-点亮1个LED灯方法220-单个数码管指示逻辑电平200-宏晶看门狗201-SD卡202-秒表203-普通定时器时钟204-彩屏控制205-彩屏图片显示206-12864+DS1302时钟+18B20温度计207-12864测试程序208-12864串行驱动演示209-12864生产厂程序21-8位数码管显示其中之一210-12864中文显示测试211-LCD12864212-12864M液晶显示(有字库)程序(汇编)213-超声波测距LCD12864显示214-红外遥控键值解码12864液晶显示(汇编语言)215-用DS1302与12864LCD设计的可调式中文电子日历216-中文12864217-中文12864LCD显示红外遥控解码实验218-IO端口输出219-IO端口输入22-8位数码管静态显示其中之二220-流水灯221-数码管显示223-独立按键224-独立按键去抖动225-定时器0226-定时器1227-定时器2228-外部中断0电平触发229-外部中断0边沿触发23-8位数码管动态扫描显示230-外部中断1231-矩阵键盘232-液晶LCM1602233-LCD1602动态显示234-EEPROM24c02235-开机次数记忆236-红外解码LCD1602液晶显示237-红外解码数码管显示238-喇叭239-液晶背光控制24-8位数码管动态扫描原理演示240-与电脑串口通信241-步进电机242-字库LCD12864液晶测试243-液晶数码综合显示244-99秒计时245-99倒计时246-抢答器247-PWM调光248-LED点阵249-直流电机调速250-按键计数器251-秒表252-数码管移动253-花样灯254-红绿灯255-音乐播放256-红外收发演示257-普通定时器时钟258-继电器控制259-ps2键盘LCD1602液晶显示26-9累加260-RTC实时时钟DS1302液晶显示261-单线温度传感器18b20262-串口测温263-带停机步进电机正反转264-步进电机正反转265-AD_DA_PCF8591266-液晶AD_DA_PCF8591267-秒手动记数268-功能感受269-流水登27-99累加270-点亮一个二极管271-用单片机控制一个灯闪烁272-将P1口状态送入P0、P2、P3273-P3口流水灯274-通过对P3口地址的操作流水点亮8位LED 275-用不同数据类型控制灯闪烁时间276-用P0口、P1 口分别显示加法和减法运算结果277-用P0、P1口显示乘法运算结果278-用P1、P0口显示除法运算结果279-用自增运算控制P0口8位LED流水花样28-999累加280-用P0口显示逻辑与运算结果281-用P0口显示条件运算结果282-用P0口显示按位异或运算结果283-用P0显示左移运算结果284-万能逻辑电路实验285-用右移运算流水点亮P1口8位LED286-用if语句控制P0口8位LED的流水方向287-用swtich语句的控制P0口8位LED的点亮状态288-用for语句控制蜂鸣器鸣笛次数289-包含单片机寄存器的头文件29-9999累加290-用do-while语句控制P0口8位LED流水点亮291-用字符型数组控制P0口8位LED流水点亮292-用P0口显示字符串常量293-用P0 口显示指针运算结果294-用指针数组控制P0口8位LED流水点亮295-用数组的指针控制P0 口8 位LED流水点亮296-用P0 、P1口显示整型函数返回值297-用有参函数控制P0口8位LED流水速度298-用数组作函数参数控制流水花样299-用数组作函数参数控制流水花样3-IO输出-点亮多个LED灯方法130-9累减300-用函数型指针控制P1口灯花样301-用指针数组作为函数的参数显示多个字符串302-字符函数ctype.h应用举例303-内部函数intrins.h应用举例304-标准函数stdlib.h应用举例305-字符串函数string.h应用举例306-宏定义应用举例307-文件包应用举例308-条件编译应用举例309-用定时器T0查询方式P2口8位控制LED闪烁31-99累减310-用定时器T1查询方式控制单片机发出1KHz音频311-将计数器T0计数的结果送P1口8位LED显示311-用定时器T0的中断控制1位LED闪烁312-用定时器T0的中断实现长时间定时313-用定时器T1中断控制两个LED以不同周期闪烁314-用计数器T1的中断控制蜂鸣器发出1KHz音频315-用定时器T0的中断实现渴望主题曲的播放316-输出50个矩形脉冲317-输出正脉宽为250微秒的方波318-用定时器T0控制输出高低宽度不同的矩形波319-用外中断0的中断方式进行数据采集32-999累减320-输出负脉宽为200微秒的方波321-方式0控制流水灯循环点亮322-数据发送程序323-数据接收程序324-单片机向PC发送数据325-单片机接收PC发出的数据326-用LED数码显示数字5327-用LED数码显示器循环显示数字0~9328-用数码管慢速动态扫描显示数字1234329-用LED数码显示器伪静态显示数字123433-9999累减330-用数码管显示动态检测结果331-数码秒表设计332-数码时钟设计333-用LED数码管显示计数器T0的计数值334-静态显示数字“59”335-无软件消抖的独立式键盘输入实验336-软件消抖的独立式键盘输入实验337-CPU控制的独立式键盘扫描实验338-定时器中断控制的独立式键盘扫描实验339-独立式键盘控制的4级变速流水灯34-显示小数点340-独立式键盘的按键功能扩展:以一当四341-独立式键盘调时的数码时钟实验342-独立式键盘控制步进电机实验343-矩阵式键盘按键值的数码管显示实验344-矩阵式键盘按键音345-简易电子琴346-矩阵式键盘实现的电子密码锁347-用LCD显示字符'A'348-用LCD循环右移显示Welcome to China 349-将数据0x0f写入AT24C02再读出送P1口显示35-数码管消隐350-液晶时钟设计36-数码管递加递减带消隐37-数码管左移38-数码管右移38-数码管右移139-数码管右移24-IO输出-点亮多个LED灯方法240-数码管循环左移41-数码管循环右移41-数码管循环右移142-数码管循环右移243-数码管闪烁44-数码管局部闪烁45-定时器046-定时器147-定时器248-产生1mS方波49-产生200mS方波5-闪烁1个LED50-产生多路不同频率方波51-1个独立按键控制LED52-1个独立按键控制LED状态转换53-2按键加减操作53-2按键加减操作数码管显示54-多位数按键加减(闪烁)54-多位数按键加减(闪烁)数码管显示55-多位数按键加减(不闪烁)55-多位数按键加减(不闪烁)数码管显示56-定时器扫描数码管(不闪烁)57-按键长按短按效果58-抢答器59-独立按键依次输入数据6-不同频率闪烁1个LED灯60-按键从右至左输入61-8位端口检测8独立按键62-矩阵键盘行列扫描63-矩阵键盘反转扫描64-矩阵键盘中断扫描65-矩阵键盘密码锁66-矩阵键盘简易计算器67-外部中断0电平触发68-外部中断1电平触发69-外部中断0下降沿触发7-不同频率闪烁多个LED灯70-外部中断1下降沿触发71-T0外部计数输入72-T1外部计数输入73-看门狗溢出测试74-按键喂狗75-喇叭发声原理76-警车声音77-救护车声音78-喇叭滴答声79-报警发声8-8位LED左移80-消防车警报81-音乐播放82-步进电机转动原理83-步进电机正反转84-步进电机按键控制85-步进电机转速数码管显示86-双步进电机综合控制86-步进电机调速原理87-双步进电机综合控制87-步进电机综合控制87-步进电机调速原理88-直流电机按键控制89-直流电机调速控制9-8位LED右移90-继电器控制原理91-双继电器模拟洗衣机电机控制92-1602液晶静态显示93-1602液晶动态显示94-1602液晶滚动显示95-1602液晶移动显示96-1602液晶按键输入显示97-2402存储1个数据98-24c02存储多个数据99-24c02存储花样流水灯。
51单片机C程序设计100例

《单片机 C 语言程序设计实训 100 例---基于 8051 和 PROTEUS 仿真》案例
//延时 void DelayMS(uint x) { uchar i; while(x--) { for(i=0;i<120;i++); } } //主程序 void main() { P0=0xfe; while(1) { P0=_crol_(P0,1); //P0 的值向左循环移动 DelayMS(150); } } 03 /* 8 只 LED 左右来回点亮 名称:8 只 LED 左右来回点亮 说明:程序利用循环移位函数_crol_和_cror_形成来回滚动的效果
名称:LED 模拟交通灯 说明:东西向绿灯亮若干秒,黄 灯闪烁 5 次后红灯亮, 红灯亮后,南 北向由红灯变为绿灯,若干秒后南北 向黄灯闪烁 5 此后变红灯,东西向变 绿灯,如此重复。 */ #include<reg51.h> #define uchar unsigned char #define uint unsigned int sbit RED_A=P0^0; //东西向灯 sbit YELLOW_A=P0^1; sbit GREEN_A=P0^2; sbit RED_B=P0^3; //南北向灯 sbit YELLOW_B=P0^4; sbit GREEN_B=P0^5; uchar Flash_Count=0,Operation_Type=1; //闪烁次数,操作类型变量
2 上海师范大学信息与机电工程学院—倪继锋
《单片机 C 语言程序设计实训 100 例---基于 8051 和 PROTEUS 仿真》案例
for(i=0;i<7;i++) { P2=_crol_(P2,1); //P2 的值向左循环移动 DelayMS(150); } for(i=0;i<7;i++) { P2=_cror_(P2,1); //P2 的值向右循环移动 DelayMS(150); } } } 04 /* 花样流水灯
单片机实例下载大全

单片机资料下载,省去找资料的麻烦 ,只供学习参考用,下载24内删掉,祝大家学习进步单片机点阵学习资料/forum.php?mod=viewthread&tid=1703&extra=page%3D1手把手教你学单片机--教程视频/forum.php?mod=viewthread&tid=1688&extra=page%3D1力天把手教你学单片机视频教程/forum.php?mod=forumdisplay&fid=110&page=1谱中单片机开发板例程/forum.php?mod=viewthread&tid=1683&extra=page%3D1初学单片机的30多个小实验,硬件简单,对初学者有帮助/forum.php?mod=viewthread&tid=1962&extra=page%3D1用单片机制作的MP3/forum.php?mod=viewthread&tid=1701&extra=page%3D151单片机应用开发大全所含100个范例代码及电路图/forum.php?mod=viewthread&tid=1820学林电子最新图文教程【含28个单片机实例流程图】/forum.php?mod=viewthread&tid=1959&extra=page%3D1谱中单片机程序烧录工具STC/forum.php?mod=viewthread&tid=1682&extra=page%3D1吉林大学《单片机技术》32讲/forum.php?mod=viewthread&tid=1693&extra=page%3D1 51单片机c语言100例教程/forum.php?mod=viewthread&tid=1700&extra=page%3D1单片机超级精华包/forum.php?mod=viewthread&tid=1687&extra=page%3D1新手学的多功能电子钟/forum.php?mod=viewthread&tid=1679&extra=page%3D1十天学会单片机和c语言视频教程/forum.php?mod=viewthread&tid=1692&extra=page%3D1 C语言函数库速查手册/forum.php?mod=viewthread&tid=1696&extra=page%3D1历史上最全的KEIL中文学习资料/forum.php?mod=viewthread&tid=1729&extra=page%3D2单片机c语言程序设计实训100例--基于AVR+PROTUES/forum.php?mod=viewthread&tid=1680&extra=page%3D2电子琴(有电路图和程序)/forum.php?mod=viewthread&tid=1965&extra=page%3D2关于单片机抗干扰的资料/forum.php?mod=viewthread&tid=1961&extra=page%3D2单片机矩阵扫描键盘程序/forum.php?mod=viewthread&tid=1723&extra=page%3D2共享通过串口在线调试51单片机的专业版培训资料/forum.php?mod=viewthread&tid=1725&extra=page%3D2。
C51单片机C语言程序100例

C51单片机C语言程序100例.Word文档目录目录(1)函数的使用和熟悉********************************/ (4)实例3:用单片机控制第一个灯亮(4)实例4:用单片机控制一个灯闪烁:认识单片机的工作频率(4)实例5:将P1口状态分别送入P0、P2、P3口:认识I/O口的引脚功能(5)实例6:使用P3口流水点亮8位LED (5)实例7:通过对P3口地址的操作流水点亮8位LED (6)实例8:用不同数据类型控制灯闪烁时间(7)实例9:用P0口、P1口分别显示加法和减法运算结果(8) 实例10:用P0、P1口显示乘法运算结果(9)实例11:用P1、P0口显示除法运算结果(9)实例12:用自增运算控制P0口8位LED流水花样(10)实例13:用P0口显示逻辑“与"运算结果(10)实例14:用P0口显示条件运算结果(11)实例15:用P0口显示按位"异或"运算结果(11)实例16:用P0显示左移运算结果(11)实例17:"万能逻辑电路"实验(11)实例18:用右移运算流水点亮P1口8位LED (12)实例19:用if语句控制P0口8位LED的流水方向(13)实例20:用swtich语句的控制P0口8位LED的点亮状态(13)实例21:用for语句控制蜂鸣器鸣笛次数(14)实例22:用while语句控制LED (16)实例23:用do-while语句控制P0口8位LED流水点亮(16) 实例24:用字符型数组控制P0口8位LED流水点亮(17) 实例25:用P0口显示字符串常量(18)实例26:用P0口显示指针运算结果(19)实例27:用指针数组控制P0口8位LED流水点亮(19)实例28:用数组的指针控制P0口8位LED流水点亮(20) 实例29:用P0、P1口显示整型函数返回值(21)实例30:用有参函数控制P0口8位LED流水速度(22)实例31:用数组作函数参数控制流水花样(23)实例32:用指针作函数参数控制P0口8位LED流水点亮(23)实例33:用函数型指针控制P1口灯花样(25)实例34:用指针数组作为函数的参数显示多个字符串(26)实例35:字符函数ctype.h应用举例(27)实例36:内部函数intrins.h应用举例(27)实例37:标准函数stdlib.h应用举例(28)实例38:字符串函数string.h应用举例(29)实例39:宏定义应用举例2 (29)1/192.实例40:宏定义应用举例2 (30)实例41:宏定义应用举例3 (30)中断、定时器************************************************ (31)实例42:用定时器T0查询方式P2口8位控制LED闪烁(31)实例43:用定时器T1查询方式控制单片机发出1KHz音频(31)实例44:将计数器T0计数的结果送P1口8位LED显示(32)实例45:用定时器T0的中断控制1位LED闪烁(33)实例46:用定时器T0的中断实现长时间定时(34)实例47:用定时器T1中断控制两个LED以不同周期闪烁(34)实例48:用计数器T1的中断控制蜂鸣器发出1KHz音频(36) 实例49:用定时器T0的中断实现"渴望"主题曲的播放(36) 实例50-1:输出50个矩形脉冲(39)实例50-2:计数器T0统计外部脉冲数(40)实例51-2:定时器T0的模式2测量正脉冲宽度(40)实例52:用定时器T0控制输出高低宽度不同的矩形波(41) 实例53:用外中断0的中断方式进行数据采集(42)实例54-1:输出负脉宽为200微秒的方波(43)实例54-2:测量负脉冲宽度(43)实例55:方式0控制流水灯循环点亮(44)实例56-1:数据发送程序(45)实例56-2:数据接收程序(47)实例57-1:数据发送程序(47)实例57-2:数据接收程序(49)实例58:单片机向PC发送数据(50)实例59:单片机接收PC发出的数据(51)*********************************数码管显示(52)实例60:用LED数码显示数字5 (52)实例61:用LED数码显示器循环显示数字0~9 (52)实例62:用数码管慢速动态扫描显示数字"1234" (53)实例63:用LED数码显示器伪静态显示数字1234 (54)实例64:用数码管显示动态检测结果(54)实例65:数码秒表设计(56)实例66:数码时钟设计(58)实例67:用LED数码管显示计数器T0的计数值(62)实例68:静态显示数字“59” (63)*****************************键盘控制2/192Word文档.Word 文档*****************************************************/ (63) 实例69:无软件消抖的独立式键盘输入实验(64)实例70:软件消抖的独立式键盘输入实验.............................................................64 实例71:CPU 控制的独立式键盘扫描实验. (65)实例72:定时器中断控制的独立式键盘扫描实验(68)实例73:独立式键盘控制的4 级变速流水灯(71)实例74:独立式键盘的按键功能扩展:"以一当四" (73)实例75:独立式键盘调时的数码时钟实验(75)实例76:独立式键盘控制步进电机实验(79)实例77:矩阵式键盘按键值的数码管显示实验(82)//实例78:矩阵式键盘按键音(85)实例79:简易电子琴(86)实例80:矩阵式键盘实现的电子密码锁 (92)******************************************************************* ***** **液晶显示LCD*********液晶显示LCD *****液晶显示LCD ************************************************************************/ (95)实例81:用LCD 显示字符'A' (96)实例82:用LCD 循环右移显示"Welcome to China"...............................................99 实例83:用LCD 显示适时检测结果...................................................................... 102 实例84:液晶时钟设计. (106)******************************************一些芯片的使用*****24c02 ........***** X5045 ***** ***** DS1302红外遥控**********************************************/ (112) 实例85:将数据"0x0f"写入***** 再读出送P1 口显示..................................112 实例86:将按键次数写入*****,再读出并用1602LCD 显示.......................117 实例87:对I2C 总线上挂接多个***** 的读写操作.......................................124 实例88:基于***** 的多机通信读取程序.. (129)实例88:基于***** 的多机通信写入程序....................................................133 实例90:***** 温度检测及其液晶显示...........................................................144 实例91:将数据"0xaa"写入X5045 再读出送P1 口显示.. (153)实例92:将流水灯控制码写入X5045 并读出送P1 口显示................................ 157 实例93:对SPI 总线上挂接多个X5045 的读写操作............................................161 实例94:基于***** 的数字电压表..................................................................165 实例95:用***** 产生锯齿波电压..................................................................171 实例96:用P1 口显示红外遥控器的按键值.........................................................171 实例97:用红外遥控器控制继电器.......................................................................174 实例98:基于DS1302 的日历时钟........................................................................177 实例99:单片机数据发送程序...............................................................................185 实例100:电机转速表设计.....................................................................................186 模拟霍尔脉冲(192)3 / 192.Word 文档/************************************************************ 函数的使用和熟悉***************************************************************///实例3:用单片机控制第一个灯亮#includereg51.h //包含51 单片机寄存器定义的头文件void main(void){P1=0xfe; //P1=1111 1110B ,即P1.0输出低电平}// 4//实例4:用单片机控制一个灯闪烁:认识单片机的工作频率#includereg51.h //包含单片机寄存器的头文件/****************************************函数功能:延时一段时间*****************************************/void delay(void) //两个void 意思分别为无需返回值,没有参数传递{unsigned int i; //定义无符号整数,最大取值范围*****for(i=0;i20XX年0;i++) //做20XX年0 次空循环; //什么也不做,等待一个机器周期}/*******************************************************函数功能:主函数(C 语言规定必须有也只能有1 个主函数)********************************************************/void main(void){while(1) //无限循环{P1=0xfe; //P1=***-*****B ,P1.0 输出低电平delay(); //延时一段时间P1=0xff; //P1=1111 1111B ,P1.0 输出高电平delay();//延时一段时间}}4/ 192.Word 文档// 5 P1 P0 P2 P3 I/O //实例5:将#includereg51.hP1 口状态分别送入P0、P2、P3 口:认识I/O口的引脚功能//包含单片机寄存器的头文件/******************************************************* 函数功能:主函数(C 语言规定必须有也只能有1个主函数)********************************************************/ void main(void){while(1) //无限循环{P1=0xff; // P1=1111 1111B,熄灭LEDP0=P1; // 将P1 口状态送入P0 口P2=P1; // 将P1 口状态送入P2 口P3=P1; // 将P1 口状态送入P3口}}//实例6:使用P3 口流水点亮8 位LED #includereg51.h //包含单片机寄存器的头文件/****************************************函数功能:延时一段时间*****************************************/void delay(void){unsigned char i,j;for(i=0;ii++)for(j=0;jj++);}/******************************************************* 函数功能:主函数********************************************************/ voidmain(void){.5/192Word文档.Word 文档while(1) { P3=0xfe; delay(); P3=0xfd; delay(); P3=0xfb; delay(); P3=0xf7; delay(); P3=0xef; //第一个灯亮//调用延时函数//第二个灯亮//调用延时函数//第三个灯亮//调用延时函数//第四个灯亮//调用延时函数//第五个灯亮delay(); //调用延时函数P3=0xdf; delay(); P3=0xbf; //第六个灯亮//调用延时函数//第七个灯亮delay(); //调用延时函数P3=0x7f; //第八个灯亮}}delay(); //调用延时函数//实例7:通过对P3 口地址的操作流水点亮8 位LED #includereg51.h //包含单片机寄存器的头文件sfr x=0xb0; //P3 口在存储器中的地址是b0H ,通过sfr 可定义8051 内核单片机//的所有内部8 位特殊功能寄存器,对地址x 的操作也就是对P1 口的操作/****************************************函数功能:延时一段时间*****************************************/void delay(void){unsigned chari,j;for(i=0;ii++)for(j=0;jj++); //利用循环等待若干机器周期,从而延时一段时间}/*****************************************函数功能:主函数6/ 192.******************************************/void main(void){while(1){x=0xfe;//第一个灯亮delay();//调用延时函数x=0xfd;//第二个灯亮delay();//调用延时函数x=0xfb;//第三个灯亮delay();//调用延时函数x=0xf7;//第四个灯亮delay();//调用延时函数x=0xef;//第五个灯亮delay();//调用延时函数x=0xdf;//第六个灯亮delay();//调用延时函数x=0xbf;//第七个灯亮delay();//调用延时函数x=0x7f;//第八个灯亮delay();//调用延时函数}}//实例8:用不同数据类型控制灯闪烁时间#includereg51.h//包含单片机寄存器的头文件/****************************************************** 函数功能:用整形数据延时一段时间******************************************************/ void int_delay(void)//延时一段较长的时间{unsigned int m;//定义无符号整形变量,双字节数据,值域为0~***** for(m=0;m*****;m++);//空操作}/******************************************************函数功能:用字符型数据延时一段时间******************************************************/7/192Word文档.Word 文档void char_delay(void) //延时一段较短的时间{unsigned char i,j; //定义无符号字符型变量,单字节数据,值域0~255 for(i=0;ii++)for(j=0;jj++); //空操作}/****************************************************** 函数功能:主函数******************************************************/ void main(void){unsigned char i;while(1){for(i=0;ii++){P1=0xfe; //P1.0 口的灯点亮int_delay(); //延时一段较长的时间P1=0xff; //熄灭int_delay(); //延时一段较长的时间}for(i=0;ii++){P1=0xef; //P1.4 口的灯点亮char_delay(); //延时一段较长的时间P1=0xff; //熄灭char_delay();//延时一段较长的时间} }}//实例9:用P0 口、P1 #includereg51.hvoid main(void){unsigned char m,n;口分别显示加法和减法运算结果m=43; //即十进制数2x16+11=43 8/192.Word 文档n=60; P1=m+n; //即十进制数3x16+12=60//P1=103=0110 0111B,结果P1.3、P1.4、P1.7 口的灯被点亮} P0=n-m; //P0=17=***-*****B,结果P0.0、P0.4的灯被熄灭//实例10:用P0、P1口显示乘法运算结果#includereg51.h //包含单片机寄存器的头文件void main(void){unsigned char m,n;unsigned int s;m=64;n=71;s=m*n; //s=64*71=4544,需要16 位二进制数表示,高8 位送P1 口,低8 位送P0 口//由于4544=17*256+192=H3*16*16*16+H2*16*16+H1*16+H0 //两边同除以256,可得17+192/256=H3*16+H2+ H1*16+H0)/256//因此,高8 位16 进制数H3*16+H2 必然等于17,即4544除以256 的商//低8 位16 进制数H1*16+H0 必然等于192,即4544 除以256的余数P1=s/256; //高8 位送P1 口,P1=17=11H=0001 0001B, P1.0 和P1.4 口灭,其余亮P0=s%256; //低8 位送P0 口, P3=192=c0H=1100 0000B,P3.1,P3.6,P3.7口灭,其余亮}//实例11:用P1、P0口显示除法运算结果#includereg51.h //包含单片机寄存器的头文件void main(void){P1=36/5; //求整数P0=((36%5)*10)/5;//求小数while(1) 9/ 192.; //无限循环防止程序“跑飞”}//实例12:用自增运算控制P0口8位LED流水花样#includereg51.h//包含单片机寄存器的头文件/******************************************************函数功能:延时一段时间******************************************************/void delay(void){unsigned int i;for(i=0;i20XX年0;i++);}/****************************************************** 函数功能:主函数******************************************************/ void main(void){unsigned char i;for(i=0;ii++)//注意i的值不能超过255{P0=i;//将i的值送P0口delay();//调用延时函数}}//实例13:用P0口显示逻辑"与"运算结果#includereg51.h//包含单片机寄存器的头文件void main(void){P0=(40)(90xab);//将逻辑运算结果送P0口while(1);//设置无限循环,防止程序“跑飞”}110/192Word文档.Word文档//14P0//实例14:用P0口显示条件运算结果#includereg51.h//包含单片机寄存器的头文件void main(void){P0=(84)?8:4;//将条件运算结果送P0口,P0=8=***-*****B while(1);//设置无限循环,防止程序“跑飞”}//实例15:用P0口显示按位"异或"运算结果#includereg51.h//包含单片机寄存器的头文件void main(void){P0=0xa2^0x3c;//将条件运算结果送P0口,P0=8=***-*****B while(1);//设置无限循环,防止程序“跑飞”}//16P0//实例16:用P0显示左移运算结果#includereg51.h//包含单片机寄存器的头文件void main(void){P0=0x3b2;//将左移运算结果送P0口,P0=***-*****B=0xec while(1);//无限循环,防止程序“跑飞”}#includereg51.hsbit F=P1^4; //实例17:"万能逻辑电路"实验//包含单片机寄存器的头文件//将F位定义为P1.4.Word文档1 1 1 / 1 9 2.Word 文档sbit X=P1^5; sbit Y=P1^6; sbit Z=P1^7; void main(void){while(1){//将X 位定义为//将Y 位定义为//将Z 位定义为P1.5 P1.6 P1.7 } }F=((~X)Y)|Z; //将逻辑运算结果赋给F;//实例18:用右移运算流水点亮P1 口8 位LED #includereg51.h //包含单片机寄存器的头文件/*****************************函数功能:延时一段时间*****************************/void delay(void){unsigned int n;for(n=0;n*****;n++);}/*****************************函数功能:主函数*****************************/void main(void){unsigned char i;while(1){P1=0xff;delay();for(i=0;ii++)//设置循环次数为8{P1=P11; //每次循环P1 的各二进位右移1 位,高位补0 delay(); //调用延时函数}} }112/ 192.Word 文档// 19 iff P0 8 LED //实例19:用iff 语句控制P0 口8 位LED 的流水方向#includereg51.h //包含单片机寄存器的头文件sbit S1=P1^4; //将S1 位定义为P1.4sbit S2=P1^5; //将S2 位定义为P1.5/*****************************函数功能:主函数*****************************/void main(void){while(1){if(S1==0) //如果按键S1 按下P0=0x0f; //P0 口高四位LED 点亮if(S2==0) //如果按键S2 按下P0=0xf0; //P0 口低四位LED 点亮}}//实例20:用swtich 语句的控制P0 口8 位LED 的点亮状态#includereg51.h //包含单片机寄存器的头文件sbit S1=P1^4; //将S1 位定义为P1.4/*****************************函数功能:延时一段时间*****************************/void delay(void){unsigned int n;for(n=0;n*****;n++);}/*****************************函数功能:主函数*****************************/void main(void){unsigned chari; 113/ 192.Word 文档i=0; while(1) { //将i 初始化为0 if(S1==0) { delay(); //如果S1 键按下//延时一段时间}if(S1==0) //如果再次检测到S1 键按下i++; //i 自增1if(i==9) //如果i=9,重新将其置为1 i=1; }switch(i ) }{} //使用多分支选择语句case 1: P0=0xfe; //第一个LED 亮break;case 2: P0=0xfd; //第二个LED 亮break;case 3:P0=0xfb; //第三个LED 亮break;case 4:P0=0xf7; //第四个LED 亮break;case 5:P0=0xef; //第五个LED 亮break;case 6:P0=0xdf; //第六个LED 亮break;case 7:P0=0xbf; //第七个LED 亮break;case 8:P0=0x7f; //第八个LED 亮break;default: //缺省值,关闭所有LEDP0=0xff;// 21 for//实例21:用for 语句控制蜂鸣器鸣笛次数#includereg51.h //包含单片机寄存器的头文件sbit sound=P3^7; //将sound 位定义为P3.7 /**************************************** 函数功能:延时形成1600Hz 音频114/ 192.Word 文档****************************************/ void delay1600(void){unsigned char n;for(n=0;nn++);}/**************************************** 函数功能:延时形成800Hz 音频****************************************/ void delay800(void) {unsigned charn;for(n=0;nn++);} /**************************************** 函数功能:主函数****************************************/ void main(void){unsigned int i;while(1){for(i=0;ii++){sound=0; //P3.7 输出低电平delay1600();sound=1; //P3.7 输出高电平delay1600();}for(i=0;ii++){sound=0; //P3.7 输出低电平delay800();sound=1; //P3.7输出高电平delay800();} }}115/ 192.Word文档//实例22:用whille语句控制LED #includereg51.h //包含单片机寄存器的头文件/****************************************函数功能:延时约60ms(3*100*200=*****μs) ****************************************/void delay60ms(void){unsigned char m,n;for(m=0;mm++)for(n=0;nn++);}/****************************************函数功能:主函数****************************************/void main(void){unsigned char i;while(1)//无限循环{i=0;//将i初始化为0while(i0xff)//当i小于0xff(255)时执行循环体{P0=i;//将i送P0口显示delay60ms();//延时i++;//i自增1}}}//实例23:用do-whiile语句控制P0口8位LED流水点亮#includereg51.h//包含单片机寄存器的头文件/****************************************函数功能:延时约60ms(3*100*200=*****μs)****************************************/void delay60ms(void){116/192.unsigned char m,n;for(m=0;mm++)for(n=0;nn++);}/****************************************函数功能:主函数****************************************/ void main(void){do{P0=0xfe;//第一个LED亮delay60ms();P0=0xfd;//第二个LED亮delay60ms();P0=0xfb;//第三个LED亮delay60ms();P0=0xf7;//第四个LED亮delay60ms();P0=0xef;//第五个LED亮delay60ms();P0=0xdf;//第六个LED亮delay60ms();delay60ms();P0=0xbf;//第七个LED亮delay60ms();P0=0x7f;//第八个LED亮delay60ms();}while(1);//无限循环,使8位LED循环流水点亮}//实例24:用字符型数组控制P0口8位LED流水点亮#includereg51.h//包含单片机寄存器的头文件/****************************************函数功能:延时约60ms(3*100*200=*****μs)****************************************/。
51单片机仿真100实例

《单片机C语言程序设计实训100例—基于8051+Proteus仿真》案例第 01 篇基础程序设计01 闪烁的LED/* 名称:闪烁的LED说明:LED按设定的时间间隔闪烁*/#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit LED=P1^0;//延时void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){while(1){LED=~LED;DelayMS(150);}}02 从左到右的流水灯/* 名称:从左到右的流水灯说明:接在P0口的8个LED从左到右循环依次点亮,产生走马灯效果*/#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intvoid DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){P0=0xfe;while(1){P0=_crol_(P0,1); //P0的值向左循环移动DelayMS(150);}}03 8只LED左右来回点亮/* 名称:8只LED左右来回点亮说明:程序利用循环移位函数_crol_和_cror_形成来回滚动的效果*/#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int//延时void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){uchar i;P2=0x01;while(1){{P2=_crol_(P2,1); //P2的值向左循环移动DelayMS(150);}for(i=0;i<7;i++){P2=_cror_(P2,1); //P2的值向右循环移动DelayMS(150);}}}04 花样流水灯/* 名称:花样流水灯说明:16只LED分两组按预设的多种花样变换显示*/#include<reg51.h>#define uchar unsignedchar#define uint unsigned intuchar code Pattern_P0[]={0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff, 0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f, 0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0xff,0x00,0x00,0xff,0xff,0x0f,0xf0,0xff, 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe, 0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe, 0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff};uchar code Pattern_P2[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0xff, 0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff, 0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f, 0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0xff,0x00,0x00,0xff,0xff,0x0f,0xf0,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f, 0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00, 0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff//延时void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){uchar i;while(1){ //从数组中读取数据送至P0和P2口显示for(i=0;i<136;i++){P0=Pattern_P0[i];P2=Pattern_P2[i];DelayMS(100);}}}05 LED模拟交通灯/* 名称:LED模拟交通灯说明:东西向绿灯亮若干秒,黄灯闪烁5次后红灯亮,红灯亮后,南北向由红灯变为绿灯,若干秒后南北向黄灯闪烁5此后变红灯,东西向变绿灯,如此重复。
C51单片机实战100例

C51单片机实战100例C51单片机作为最常用的单片机芯片之一,具有性能稳定、资源丰富、易于学习和开发等优势。
本文将介绍C51单片机实战100例,旨在帮助读者更好地理解和应用C51单片机。
第一例:LED灯闪烁首先,我们以最简单的LED灯闪烁为例,来体验一下C51单片机的编程过程。
首先我们需要准备一个开发板、几个电阻和电源。
然后,根据单片机的引脚图,将LED灯连接好。
接下来,我们需要编写简单的C语言程序来控制LED灯的闪烁。
例如,我们可以使用内置的延时函数来调整灯亮的时间,实现闪烁效果。
经过编译和下载,我们就可以看到LED灯以一定的频率闪烁,一闪一闪的。
第二例:数码管显示除了控制LED灯闪烁外,C51单片机还可以用来控制各种数码管显示。
例如,我们可以编写程序实现数字的倒计时功能。
在倒计时过程中,我们可以通过数码管的显示,直观地观察到时间的变化。
在编写程序时,我们需要根据数码管的接口电路来控制引脚的输出,并使用定时器中断来实现秒数的递减。
通过不断循环调用显示函数,我们可以将倒计时的数字显示在数码管上,并实时更新。
第三例:温湿度检测C51单片机还可以用来进行温湿度的检测。
我们可以连接温湿度传感器到单片机的引脚上,并编写相应的程序来读取传感器的数据。
在编写程序时,我们可以使用串口通信来与PC机进行数据的交互。
通过串口发送指令,单片机可以将温湿度的数据发送回PC机进行实时显示。
这样,我们就可以通过C51单片机来实现温湿度的实时监测功能。
......通过以上几个实例,可以清楚地看到C51单片机的强大功能和灵活性。
C51单片机实战100例可以涵盖更多的应用场景,如蜂鸣器控制、电机驱动、红外遥控等。
读者可以根据自己的需求和兴趣选择相应的实例进行学习和实践。
结语总而言之,C51单片机作为一种常见且广泛使用的单片机芯片,具有强大的功能和灵活性。
通过实战100例的学习和实践,读者可以更加深入地理解和掌握C51单片机的编程方法和应用技巧。
51单片机C程序设计100例

名称:从左到右的流水灯 说明: 接在 P0 口的 8 个 LED 从左到右循环依次点亮,产生走 马灯效果 */ #include<reg51.h> #include<intrins.h> #define uchar unsigned char #define uint unsigned int
1
上海师范大学信息与机电工程学院—倪继锋
16只led分两组按预设的多种花样变换显示includedefineucharunsignedchardefineuintunsignedintucharcodepatternp00xfc0xf90xf30xe70xcf0x9f0x3f0x7f0xff0xff0xff0xff0xff0xff0xff0xff0xe70xdb0xbd0x7e0xbd0xdb0xe70xff0xe70xc30x810x000x810xc30xe70xff0xaa0x550x180xff0xf00x0f0x000xff0xf80xf10xe30xc70x8f0x1f0x3f0x7f0x7f0x3f0x1f0x8f0xc70xe30xf10xf80xff0x000x000xff0xff0x0f0xf00xff0xfe0xfd0xfb0xf70xef0xdf0xbf0x7f0xff0xff0xff0xff0xff0xff0xff0xff0xff0xff0xff0xff0xff0xff0xff0xff0x7f0xbf0xdf0xef0xf70xfb0xfd0xfe0xfe0xfc0xf80xf00xe00xc00x800x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x000x800xc00xe00xf00xf80xfc0xfe0x000xff0x000xff0x000xff0x000xffucharcodepatternp20xff0xff0xff0xff0xff0xff0xff0xfe0xfc0xf90xf30xe70xcf0x9f0x3f0xff0xe70xdb0xbd0x7e0xbd0xdb0xe70xff0xe70xc30x810x000x810xc30xe70xff0xaa0x550x180xff0xf00x0f0x000xff0xf80xf10xe30xc70x8f0x1f0x3f0x7f0x7f0x3f0x1f0x8f0xc70xe30xf10xf80xff0x000x000xff0xff0x0f0xf00xff0xff0xff0xff0xff0xff0xff0xff0xff0xfe0xfd0xfb0xf70xef0xdf0xbf0x7f0x7f0xbf0xdf0xef0xf70xfb0xfd0xfe0xff0xff0xff0xff0xff
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机资料教程下载,省去找资料的麻烦,只供学习参考用,下载24内删掉,祝大家学习进步
单片机点阵学习资料
/thread-1703-1-1.html
手把手教你学单片机--教程视频
/thread-1688-1-1.html
力天把手教你学单片机视频教程
/thread-1689-1-1.html
谱中单片机开发板例程
/thread-1683-1-2.html
初学单片机的30,硬件简单对初学者有帮助
/thread-1962-1-1.html
用单片机制作的MP3
/thread-1701-1-2.html
51单片机应用开发大全所含100个范例代码及电路图
/thread-1820-1-1.html
【含28个单片机实例流程图】
/thread-1959-1-2.html
谱中单片机程序烧录工具STC
/thread-1682-1-2.html
《单片机技术》32讲
/thread-1693-1-1.html
51单片机c语言100例教程
/thread-1700-1-1.html
单片机超级精华包
/thread-1687-1-1.html
新手学的多功能电子钟
/thread-1679-1-1.html
十天学会单片机和c语言视频教程
/thread-1692-1-1.html
C语言函数库速查手册
/thread-1696-1-1.html
历史上最全的KEIL中文学习资料
/thread-1729-1-2.html
单片机c语言程序设计实训100例--基于AVR+PROTUES /thread-1695-1-2.html
(有电路图和程序)
/thread-1965-1-1.html
关于单片机抗干扰的资料
/thread-1961-1-1.html
单片机矩阵扫描键盘程序
/thread-1723-1-1.html
共享通过串口在线调试51单片机的专业版培训资料
/thread-1725-1-1.html。