收藏 分享(赏)

单片机编程实例大全.doc

上传人:hwpkd79526 文档编号:7495018 上传时间:2019-05-20 格式:DOC 页数:189 大小:629.50KB
下载 相关 举报
单片机编程实例大全.doc_第1页
第1页 / 共189页
单片机编程实例大全.doc_第2页
第2页 / 共189页
单片机编程实例大全.doc_第3页
第3页 / 共189页
单片机编程实例大全.doc_第4页
第4页 / 共189页
单片机编程实例大全.doc_第5页
第5页 / 共189页
点击查看更多>>
资源描述

1、学习单片机/实例 1:用单片机控制第一个灯亮#include /包含 51 单片机寄存器定义的头文件void main(void)P1=0xfe; /P1=1111 1110B,即 P1.0 输出低电平/实例 2:用单片机控制一个灯闪烁:认识单片机的工作频率#include /包含单片机寄存器的头文件/ 函数功能:延时一段时间/void delay(void) /两个 void 意思分别为无需返回值,没有参数传递unsigned int i; /定义无符号整数,最大取值范围 65535for(i=0;i /包含单片机寄存器的头文件/ 函数功能:主函数 (C 语言规定必须有也只能有 1 个主函数

2、)/void main(void)while(1) /无限循环 P1=0xff; / P1=1111 1111B,熄灭 LEDP0=P1; / 将 P1 口状态送入 P0 口P2=P1; / 将 P1 口状态送入 P2 口P3=P1; / 将 P1 口状态送入 P3 口/实例 4:使用 P3 口流水点亮 8 位 LED #include /包含单片机寄存器的头文件/ 函数功能:延时一段时间/void delay(void)unsigned char i,j;for(i=0;i /包含单片机寄存器的头文件sfr x=0xb0; /P3 口在存储器中的地址是 b0H, 通过 sfr 可定义 805

3、1 内核单片机/的所有内部 8 位特殊功能寄存器, 对地址 x 的操作也就是对 P1 口的操作/ 函数功能:延时一段时间/void delay(void)unsigned char i,j;for(i=0;i /包含单片机寄存器的头文件/ 函数功能:用整形数据延时一段时间/void int_delay(void) /延时一段较长的时间unsigned int m; /定义无符号整形变量,双字节数据,值域为 065535for(m=0;mvoid main(void) unsigned char m,n;m=43; /即十进制数 2x16+11=43n=60; /即十进制数 3x16+12=60

4、P1=m+n; /P1=103=0110 0111B,结果 P1.3、P1.4、P1.7 口的灯被点亮P0=n-m; /P0=17=0001 0001B,结果 P0.0、P0.4 的灯被熄灭/实例 10:用 P0、P1 口显示乘法运算结果#include /包含单片机寄存器的头文件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

5、 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 口

6、显示除法运算结果#include /包含单片机寄存器的头文件void main(void) P1=36/5; /求整数P0=(36%5) 10)/5; /求小数while(1) ; /无限循环防止程序“跑飞”/实例 12:用自增运算控制 P0 口 8 位 LED 流水花样#include /包含单片机寄存器的头文件/ 函数功能:延时一段时间/void delay(void) unsigned int i; for(i=0;i /包含单片机寄存器的头文件void main(void) P0=(40)/将逻辑运算结果送 P0 口while(1); /设置无限循环,防止程序“跑飞”/实例 14:用

7、P0 口显示条件运算结果#include /包含单片机寄存器的头文件void main(void) P0=(84)?8:4;/将条件运算结果送 P0 口,P0=8=0000 1000Bwhile(1); /设置无限循环,防止程序“跑飞”/实例 15:用 P0 口显示按位“异或“运算结果#include /包含单片机寄存器的头文件void main(void) P0=0xa20x3c;/将条件运算结果送 P0 口,P0=8=0000 1000Bwhile(1); /设置无限循环,防止程序“跑飞”/实例 16:用 P0 显示左移运算结果#include /包含单片机寄存器的头文件void main

8、(void) P0=0x3b /包含单片机寄存器的头文件sbit F=P14; /将 F 位定义为 P1.4sbit X=P15; /将 X 位定义为 P1.5sbit Y=P16; /将 Y 位定义为 P1.6sbit Z=P17; /将 Z 位定义为 P1.7void main(void) while(1)F=(X) /将逻辑运算结果赋给 F; /实例 18:用右移运算流水点亮 P1 口 8 位 LED#include /包含单片机寄存器的头文件/ 函数功能:延时一段时间/void delay(void)unsigned int n;for(n=0;n1; /每次循环 P1 的各二进位右移

9、 1 位,高位补 0delay(); /调用延时函数/实例 19:用 if 语句控制 P0 口 8 位 LED 的流水方向#include /包含单片机寄存器的头文件sbit S1=P14; /将 S1 位定义为 P1.4sbit S2=P15; /将 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 的点

10、亮状态#include /包含单片机寄存器的头文件sbit S1=P14; /将 S1 位定义为 P1.4/ 函数功能:延时一段时间/void delay(void)unsigned int n;for(n=0;n /包含单片机寄存器的头文件sbit sound=P37; /将 sound 位定义为 P3.7/ 函数功能:延时形成 1600Hz 音频/void delay1600(void)unsigned char n;for(n=0;n /包含单片机寄存器的头文件/ 函数功能:延时约 60ms (3 100 200=60000s)/void delay60ms(void)unsigned

11、char m,n;for(m=0;m /包含单片机寄存器的头文件/ 函数功能:延时约 60ms (3 100 200=60000s)/void delay60ms(void)unsigned char m,n;for(m=0;m /包含单片机寄存器的头文件/ 函数功能:延时约 60ms (3 100 200=60000s)/void delay60ms(void)unsigned char m,n;for(m=0;m /包含单片机寄存器的头文件/ 函数功能:延时约 150ms (3 200 250=150 000s=150ms/void delay150ms(void)unsigned cha

12、r m,n;for(m=0;mvoid main(void) unsigned char p1, p2; /定义无符号字符型指针变量 p1,p2unsigned char i,j; /定义无符号字符型数据i=25; /给 i 赋初值 25j=15;p1= /使指针变量指向 i ,对指针初始化p2= /使指针变量指向 j ,对指针初始化P0= p1+ p2; / p1+ p2 相当于 i+j,所以 P0=25+15=40=0x28/则 P0=0010 1000B,结果 P0.3、P0.5 引脚 LED 熄灭,其余点亮while(1); /无限循环,防止程序“跑飞”/实例 27:用指针数组控制 P

13、0 口 8 位 LED 流水点亮#include/ 函数功能:延时约 150ms (3 200 250=150 000s=150ms/void delay150ms(void)unsigned char m,n;for(m=0;m/ 函数功能:延时约 150ms (3 200 250=150 000s=150ms/void delay150ms(void)unsigned char m,n;for(m=0;m/ 函数功能:计算两个无符号整数的和/unsigned int sum(int a,int b)unsigned int s;s=a+b;return (s);/ 函数功能:主函数/voi

14、d main(void) unsigned z;z=sum(2008,2009);P1=z/256; /取得 z 的高 8 位P0=z%256; /取得 z 的低 8 位while(1);/实例 30:用有参函数控制 P0 口 8 位 LED 流水速度#include/ 函数功能:延时一段时间/void delay(unsigned char x)unsigned char m,n;for(m=0;m/ 函数功能:延时约 150ms/void delay(void)unsigned char m,n;for(m=0;m/ 函数功能:延时约 150ms/void delay(void)unsig

15、ned char m,n;for(m=0;m /包含 51 单片机寄存器定义的头文件unsigned char code Tab=0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F;/流水灯控制码,该数组被定义为全局变量/ 函数功能:延时约 150ms/void delay(void) unsigned char m,n;for(m=0;m /包含 51 单片机寄存器定义的头文件unsigned char code str1 =“Temperature is tested by DS18B20“;/C 语言中,字符串是作为字符数组来处理的unsigned char

16、code str2 =“Now temperature is:“; /所以,字符串的名字就是字符串的首地址 unsigned char code str3 =“The Systerm is designed by Zhang San“;unsigned char code str4 =“The date is 2008-9-30“;unsigned char p =str1,str2,str3,str4; /定义 p4为指向 4 个字符串的字符型指针数组 / 函数功能:延时约 150ms/void delay(void) unsigned char m,n;for(m=0;m /包含 51 单

17、片机寄存器定义的头文件#includevoid main(void)while(1)P3=isalpha(_)?0xf0:0x0f;/条件运算,若_是英文字母,P3=0xf0 /实例 36:内部函数 intrins.h 应用举例#include /包含 51 单片机寄存器定义的头文件#include /包含函数 isalpha()声明的头文件/ 函数功能:延时约 150ms/void delay(void)unsigned char m,n;for(m=0;m /包含 51 单片机寄存器定义的头文件#include /包含函数 isalpha()声明的头文件/ 函数功能:延时约 150ms/v

18、oid delay(void)unsigned char m,n;for(m=0;m /包含 51 单片机寄存器定义的头文件#include /包含函数 isalpha()声明的头文件void main(void)unsigned char str1 =“Now, The temperature is :“;unsigned char str2 =“Now, The temperature is 36 Centgrade:“;unsigned char i;i=strcmp(str1,str2); /比较两个字符串,并将结果存入 iif(i=0) /str1=str2P3=0x00;elsei

19、f(istr2P3=0x0f;while(1); /防止程序“跑飞”/实例 39:宏定义应用举例 2#include /包含 51 单片机寄存器定义的头文件# define F(a,b) (a)+(a) (b)/256+(b) /带参数的宏定义,a 和 b 为形参void main(void)unsigned char i,j,k;i=40;j=30;k=20;P3=F(i,j+k); /i 和 j+k 分别为实参,宏展开时,实参将替代宏定义中的形参while(1);/实例 40:宏定义应用举例 2#include#includevoid main(void) P3_0=0; /将 P3.0

20、引脚置低电平,LED 点亮P3_1=0; /将 P3.0 引脚置低电平,LED 点亮P3_2=0; /将 P3.0 引脚置低电平,LED 点亮P3_3=0; /将 P3.0 引脚置低电平,LED 点亮P3_4=1; /将 P3.4 引脚置高电平,LED 熄灭P3_5=1; /将 P3.5 引脚置高电平,LED 熄灭P3_6=1; /将 P3.7 引脚置高电平,LED 熄灭P3_7=1; /将 P3.7 引脚置高电平,LED 熄灭while(1);/实例 41:宏定义应用举例 3#include /包含 51 单片机寄存器定义的头文件#define MAX 100 /将 MAX 宏定义为字符串

21、100void main(void) #if MAX80 /如果字符串 100 大于 80P3=0xf0; /P3 口低四位 LED 点亮#elseP3=0x0f; /否则,P3 口高四位 LED 点亮#endif /结束本次编译/ 中断、定时器 中断、定时器 中断、定时器 中断、定时器 /实例 42:用定时器 T0 查询方式 P2 口 8 位控制 LED 闪烁#include / 包含 51 单片机寄存器定义的头文件/ 函数功能:主函数/void main(void)/ EA=1; /开总中断/ ET0=1; /定时器 T0 中断允许 TMOD=0x01; /使用定时器 T0 的模式 1TH

22、0=(65536-46083)/256; /定时器 T0 的高 8 位赋初值TL0=(65536-46083)%256; /定时器 T0 的高 8 位赋初值TR0=1; /启动定时器 T0TF0=0;P2=0xff;while(1)/无限循环等待查询while(TF0=0);TF0=0;P2=P2;TH0=(65536-46083)/256; /定时器 T0 的高 8 位赋初值TL0=(65536-46083)%256; /定时器 T0 的高 8 位赋初值/实例 43:用定时器 T1 查询方式控制单片机发出 1KHz 音频#include / 包含 51 单片机寄存器定义的头文件sbit so

23、und=P37; /将 sound 位定义为 P3.7 引脚/ 函数功能:主函数/void main(void)/ EA=1; /开总中断/ ET0=1; /定时器 T0 中断允许 TMOD=0x10; /使用定时器 T1 的模式 1TH1=(65536-921)/256; /定时器 T1 的高 8 位赋初值TL1=(65536-921)%256; /定时器 T1 的高 8 位赋初值TR1=1; /启动定时器 T1TF1=0;while(1)/无限循环等待查询while(TF1=0);TF1=0;sound=sound; /将 P3.7 引脚输出电平取反TH1=(65536-921)/256;

24、 /定时器 T0 的高 8 位赋初值TL1=(65536-921)%256; /定时器 T0 的高 8 位赋初值/实例 44:将计数器 T0 计数的结果送 P1 口 8 位 LED 显示#include / 包含 51 单片机寄存器定义的头文件sbit S=P34; /将 S 位定义为 P3.4 引脚/ 函数功能:主函数/void main(void)/ EA=1; /开总中断/ ET0=1; /定时器 T0 中断允许 TMOD=0x02; /使用定时器 T0 的模式 2TH0=256-156; /定时器 T0 的高 8 位赋初值TL0=256-156; /定时器 T0 的高 8 位赋初值TR

25、0=1; /启动定时器 T0while(1)/无限循环等待查询while(TF0=0) /如果未计满就等待if(S=0) /按键 S 按下接地,电平为 0P1=TL0; /计数器 TL0 加 1 后送 P1 口显示 TF0=0; /计数器溢出后,将 TF0 清 0/实例 45:用定时器 T0 的中断控制 1 位 LED 闪烁#include / 包含 51 单片机寄存器定义的头文件sbit D1=P20; /将 D1 位定义为 P2.0 引脚/ 函数功能:主函数/void main(void)EA=1; /开总中断ET0=1; /定时器 T0 中断允许 TMOD=0x01; /使用定时器 T0

26、 的模式 2TH0=(65536-46083)/256; /定时器 T0 的高 8 位赋初值TL0=(65536-46083)%256; /定时器 T0 的高 8 位赋初值TR0=1; /启动定时器 T0while(1)/无限循环等待中断;/ 函数功能:定时器 T0 的中断服务程序/void Time0(void) interrupt 1 using 0 /“interrupt”声明函数为中断服务函数/其后的 1 为定时器 T0 的中断编号; 0 表示使用第 0 组工作寄存器 D1=D1; /按位取反操作,将 P2.0 引脚输出电平取反TH0=(65536-46083)/256; /定时器 T

27、0 的高 8 位重新赋初值TL0=(65536-46083)%256; /定时器 T0 的高 8 位重新赋初值/实例 46:用定时器 T0 的中断实现长时间定时#include / 包含 51 单片机寄存器定义的头文件sbit D1=P20; /将 D1 位定义为 P2.0 引脚unsigned char Countor; /设置全局变量,储存定时器 T0 中断次数/ 函数功能:主函数/void main(void)EA=1; /开总中断ET0=1; /定时器 T0 中断允许 TMOD=0x01; /使用定时器 T0 的模式 2TH0=(65536-46083)/256; /定时器 T0 的高 8 位赋初值TL0=(65536-46083)%256; /定时器 T0 的高 8 位赋初值

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报