搜档网
当前位置:搜档网 › 51单片机c语言应用100例

51单片机c语言应用100例

51单片机c语言应用100例
51单片机c语言应用100例

目录

目录 (1)

函数的使用和熟悉 (4)

实例3:用单片机控制第一个灯亮 (4)

实例4:用单片机控制一个灯闪烁:认识单片机的工作频率 (4)

实例5:将P1口状态分别送入P0、P2、P3口:认识I/O口的引脚功能 (4)

实例6:使用P3口流水点亮8位LED (5)

实例7:通过对P3口地址的操作流水点亮8位LED (6)

实例8:用不同数据类型控制灯闪烁时间 (7)

实例9:用P0口、P1 口分别显示加法和减法运算结果 (8)

实例10:用P0、P1口显示乘法运算结果 (8)

实例11:用P1、P0口显示除法运算结果 (8)

实例12:用自增运算控制P0口8位LED流水花样 (9)

实例13:用P0口显示逻辑"与"运算结果 (9)

实例14:用P0口显示条件运算结果 (10)

实例15:用P0口显示按位"异或"运算结果 (10)

实例16:用P0显示左移运算结果 (10)

实例17:"万能逻辑电路"实验 (10)

实例18:用右移运算流水点亮P1口8位LED (11)

实例19:用if语句控制P0口8位LED的流水方向 (11)

实例20:用swtich语句的控制P0口8位LED的点亮状态 (12)

实例21:用for语句控制蜂鸣器鸣笛次数 (13)

实例22:用while语句控制LED (14)

实例23:用do-while语句控制P0口8位LED流水点亮 (15)

实例24:用字符型数组控制P0口8位LED流水点亮 (16)

实例25:用P0口显示字符串常量 (16)

实例26:用P0 口显示指针运算结果 (17)

实例27:用指针数组控制P0口8位LED流水点亮 (17)

实例28:用数组的指针控制P0 口8 位LED流水点亮 (18)

实例29:用P0 、P1口显示整型函数返回值 (19)

实例30:用有参函数控制P0口8位LED流水速度 (20)

实例31:用数组作函数参数控制流水花样 (20)

实例32:用指针作函数参数控制P0口8位LED流水点亮 (21)

实例33:用函数型指针控制P1口灯花样 (22)

实例34:用指针数组作为函数的参数显示多个字符串 (23)

实例35:字符函数ctype.h应用举例 (24)

实例36:内部函数intrins.h应用举例 (25)

实例37:标准函数stdlib.h应用举例 (25)

实例38:字符串函数string.h应用举例 (26)

实例39:宏定义应用举例2 (26)

实例40:宏定义应用举例2 (27)

实例41:宏定义应用举例3 (27)

中断、定时器 (28)

实例42:用定时器T0查询方式P2口8位控制LED闪烁 (28)

实例43:用定时器T1查询方式控制单片机发出1KHz音频 (28)

实例45:用定时器T0的中断控制1位LED闪烁 (30)

实例46:用定时器T0的中断实现长时间定时 (30)

实例47:用定时器T1中断控制两个LED以不同周期闪烁 (31)

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

实例49:用定时器T0的中断实现"渴望"主题曲的播放 (33)

实例50-1:输出50个矩形脉冲 (35)

实例50-2:计数器T0统计外部脉冲数 (36)

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

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

实例53:用外中断0的中断方式进行数据采集 (38)

实例54-1:输出负脉宽为200微秒的方波 (38)

实例54-2:测量负脉冲宽度 (39)

实例55:方式0控制流水灯循环点亮 (40)

实例56-1:数据发送程序 (41)

实例56-2:数据接收程序 (42)

实例57-1:数据发送程序 (43)

实例57-2:数据接收程序 (44)

实例58:单片机向PC发送数据 (45)

实例59:单片机接收PC发出的数据 (46)

数码管显示 (46)

实例60:用LED数码显示数字5 (46)

实例61:用LED数码显示器循环显示数字0~9 (47)

实例62:用数码管慢速动态扫描显示数字"1234" (47)

实例63:用LED数码显示器伪静态显示数字1234 (48)

实例64:用数码管显示动态检测结果 (49)

实例65:数码秒表设计 (50)

实例66:数码时钟设计 (52)

实例67:用LED数码管显示计数器T0的计数值 (55)

实例68:静态显示数字“59” (56)

键盘控制 (57)

实例69:无软件消抖的独立式键盘输入实验 (57)

实例70:软件消抖的独立式键盘输入实验 (57)

实例71:CPU控制的独立式键盘扫描实验 (58)

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

实例73:独立式键盘控制的4级变速流水灯 (64)

实例74:独立式键盘的按键功能扩展:"以一当四" (66)

实例75:独立式键盘调时的数码时钟实验 (67)

实例76:独立式键盘控制步进电机实验 (71)

实例77:矩阵式键盘按键值的数码管显示实验 (73)

实例78:矩阵式键盘按键音 (76)

实例79:简易电子琴 (77)

实例80:矩阵式键盘实现的电子密码锁 (82)

液晶显示LCD (85)

实例81:用LCD显示字符'A' (85)

实例82:用LCD循环右移显示"Welcome to China" (87)

实例83:用LCD显示适时检测结果 (91)

实例84:液晶时钟设计 (94)

实例85:将数据"0x0f"写入AT24C02再读出送P1口显示 (99)

实例86:将按键次数写入AT24C02,再读出并用1602LCD显示 (103)

实例87:对I2C总线上挂接多个AT24C02的读写操作 (109)

实例88:基于AT24C02的多机通信读取程序 (114)

实例88:基于AT24C02的多机通信写入程序 (117)

实例90:DS18B20温度检测及其液晶显示 (127)

实例91:将数据"0xaa"写入X5045再读出送P1口显示 (134)

实例92:将流水灯控制码写入X5045并读出送P1口显示 (137)

实例93:对SPI总线上挂接多个X5045的读写操作 (141)

实例94:基于ADC0832的数字电压表 (145)

实例95:用DAC0832产生锯齿波电压 (150)

实例96:用P1口显示红外遥控器的按键值 (150)

实例97:用红外遥控器控制继电器 (153)

实例98:基于DS1302的日历时钟 (155)

实例99:单片机数据发送程序 (162)

实例100:电机转速表设计 (164)

模拟霍尔脉冲.............................................................................. 错误!未定义书签。

/*函数的使用和熟悉/

实例3:用单片机控制第一个灯亮

#include //包含51单片机寄存器定义的头文件

void main(void)

{

P1=0xfe; //P1=1111 1110B,即P1.0输出低电平

}

//实例4:用单片机控制一个灯闪烁:认识单片机的工作频率

#include //包含单片机寄存器的头文件

/

函数功能:延时一段时间

/

void delay(void) //两个void意思分别为无需返回值,没有参数传递

{

unsigned int i; //定义无符号整数,最大取值范围65535

for(i=0;i<20000;i++) //做20000次空循环

; //什么也不做,等待一个机器周期

}

/

函数功能:主函数(C语言规定必须有也只能有1个主函数)

/

void main(void)

{

while(1) //无限循环

{

P1=0xfe; //P1=1111 1110B,P1.0输出低电平

delay(); //延时一段时间

P1=0xff; //P1=1111 1111B,P1.0输出高电平

delay(); //延时一段时间

}

}

//实例5:将P1口状态分别送入P0、P2、P3口:认识I/O口的引脚功能#include //包含单片机寄存器的头文件

/

函数功能:主函数(C语言规定必须有也只能有1个主函数)

void main(void)

{

while(1) //无限循环

{

P1=0xff; // P1=1111 1111B,熄灭LED

P0=P1; // 将P1口状态送入P0口

P2=P1; // 将P1口状态送入P2口

P3=P1; // 将P1口状态送入P3口

}

}

//实例6:使用P3口流水点亮8位LED #include //包含单片机寄存器的头文件

/

函数功能:延时一段时间

/

void delay(void)

{

unsigned char i,j;

for(i=0;i<250;i++)

for(j=0;j<250;j++);

}

/

函数功能:主函数

/

void main(void)

{

while(1)

{

P3=0xfe; //第一个灯亮

delay(); //调用延时函数

P3=0xfd; //第二个灯亮

delay(); //调用延时函数

P3=0xfb; //第三个灯亮

delay(); //调用延时函数

P3=0xf7; //第四个灯亮

delay(); //调用延时函数

P3=0xef; //第五个灯亮

delay(); //调用延时函数

P3=0xdf; //第六个灯亮

delay(); //调用延时函数

P3=0xbf; //第七个灯亮

delay(); //调用延时函数

delay(); //调用延时函数

}

}

//实例7:通过对P3口地址的操作流水点亮8位LED #include //包含单片机寄存器的头文件

sfr x=0xb0; //P3口在存储器中的地址是b0H,通过sfr可定义8051内核单片机//的所有内部8位特殊功能寄存器,对地址x的操作也就是对P1口的操作/

函数功能:延时一段时间

/

void delay(void)

{

unsigned char i,j;

for(i=0;i<250;i++)

for(j=0;j<250;j++); //利用循环等待若干机器周期,从而延时一段时间}

/

函数功能:主函数

/

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:用不同数据类型控制灯闪烁时间#include //包含单片机寄存器的头文件

/

函数功能:用整形数据延时一段时间

/

void int_delay(void) //延时一段较长的时间

{

unsigned int m; //定义无符号整形变量,双字节数据,值域为0~65535 for(m=0;m<36000;m++)

; //空操作

}

/

函数功能:用字符型数据延时一段时间

/

void char_delay(void) //延时一段较短的时间

{

unsigned char i,j; //定义无符号字符型变量,单字节数据,值域0~255 for(i=0;i<200;i++)

for(j=0;j<180;j++)

; //空操作

}

/

函数功能:主函数

/

void main(void)

{

unsigned char i;

while(1)

{

for(i=0;i<3;i++)

{

P1=0xfe; //P1.0口的灯点亮

int_delay(); //延时一段较长的时间

P1=0xff; //熄灭

int_delay(); //延时一段较长的时间

}

for(i=0;i<3;i++)

{

P1=0xef; //P1.4口的灯点亮

char_delay(); //延时一段较长的时间

P1=0xff; //熄灭

char_delay(); //延时一段较长的时间

//实例9:用P0口、P1 口分别显示加法和减法运算结果

#include

void main(void)

{

unsigned char m,n;

m=43; //即十进制数2x16+11=43

n=60; //即十进制数3x16+12=60

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*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口显示除法运算结果

#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<20000;i++)

;

}

/

函数功能

/

void main(void)

{

unsigned char i;

for(i=0;i<255;i++) //注意i的值不能超过255

{

P0=i; //将i的值送P0口

delay(); //调用延时函数

}

}

//实例13:用P0口显示逻辑"与"运算结果

#include //包含单片机寄存器的头文件

void main(void)

{

P0=(4>0)&&(9>0xab);//将逻辑运算结果送P0口

while(1)

; //设置无限循环,防止程序“跑飞”

}

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

#include //包含单片机寄存器的头文件

void main(void)

{

P0=(8>4)?8:4;//将条件运算结果送P0口,P0=8=0000 1000B

while(1)

; //设置无限循环,防止程序“跑飞”

}

//实例15:用P0口显示按位"异或"运算结果#include //包含单片机寄存器的头文件

void main(void)

{

P0=0xa2^0x3c;//将条件运算结果送P0口,P0=8=0000 1000B

while(1)

; //设置无限循环,防止程序“跑飞”

}

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

#include //包含单片机寄存器的头文件

void main(void)

{

P0=0x3b<<2;//将左移运算结果送P0口,P0=1110 1100B=0xec

while(1)

; //无限循环,防止程序“跑飞”

}

//实例17:"万能逻辑电路"实验

#include //包含单片机寄存器的头文件

sbit F=P1^4; //将F位定义为P1.4

sbit X=P1^5; //将X位定义为P1.5

sbit Y=P1^6; //将Y位定义为P1.6

sbit Z=P1^7; //将Z位定义为P1.7

void main(void)

while(1)

{

F=((~X)&Y)|Z; //将逻辑运算结果赋给F

;

}

}

//实例18:用右移运算流水点亮P1口8位LED #include //包含单片机寄存器的头文件

/

函数功能:延时一段时间

/

void delay(void)

{

unsigned int n;

for(n=0;n<30000;n++)

;

}

/

函数功能:主函数

/

void main(void)

{

unsigned char i;

while(1)

{

P1=0xff;

delay();

for(i=0;i<8;i++)//设置循环次数为8

{

P1=P1>>1; //每次循环P1的各二进位右移1位,高位补0

delay(); //调用延时函数

}

}

}

//实例19:用if语句控制P0口8位LED的流水方向#include //包含单片机寄存器的头文件

sbit S1=P1^4; //将S1位定义为P1.4

sbit 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的点亮状态#include //包含单片机寄存器的头文件

sbit S1=P1^4; //将S1位定义为P1.4

/

函数功能:延时一段时间

/

void delay(void)

{

unsigned int n;

for(n=0;n<10000;n++)

;

}

/

函数功能:主函数

/

void main(void)

{

unsigned char i;

i=0; //将i初始化为0

while(1)

{

if(S1==0) //如果S1键按下

{

delay(); //延时一段时间

if(S1==0) //如果再次检测到S1键按下

i++; //i自增1

if(i==9) //如果i=9,重新将其置为1

i=1;

}

{

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: //缺省值,关闭所有LED

P0=0xff;

}

}

}

//实例21:用for语句控制蜂鸣器鸣笛次数#include //包含单片机寄存器的头文件

sbit sound=P3^7; //将sound位定义为P3.7

/

函数功能:延时形成1600Hz音频

/

void delay1600(void)

{

unsigned char n;

for(n=0;n<100;n++)

;

}

/

函数功能:延时形成800Hz音频

/

void delay800(void)

{

unsigned char n;

for(n=0;n<200;n++)

;

}

/

函数功能:主函数

/

void main(void)

{

unsigned int i;

while(1)

{

for(i=0;i<830;i++)

{

sound=0; //P3.7输出低电平

delay1600();

sound=1; //P3.7输出高电平

delay1600();

}

for(i=0;i<200;i++)

{

sound=0; //P3.7输出低电平

delay800();

sound=1; //P3.7输出高电平

delay800();

}

}

}

//实例22:用while语句控制LED #include //包含单片机寄存器的头文件

/

函数功能:延时约60ms (3*100*200=60000μs)

/

void delay60ms(void)

{

unsigned char m,n;

for(m=0;m<100;m++)

for(n=0;n<200;n++)

;

}

/

函数功能:主函数

/

void main(void)

unsigned char i;

while(1) //无限循环

{

i=0; //将i初始化为0

while(i<0xff) //当i小于0xff(255)时执行循环体

{

P0=i; //将i送P0口显示

delay60ms(); //延时

i++; //i自增1

}

}

}

//实例23:用do-while语句控制P0口8位LED流水点亮#include //包含单片机寄存器的头文件

/

函数功能:延时约60ms (3*100*200=60000μs)

/

void delay60ms(void)

{

unsigned char m,n;

for(m=0;m<100;m++)

for(n=0;n<200;n++)

;

}

/

函数功能:主函数

/

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();

P0=0xbf; //第七个LED亮

delay60ms();

P0=0x7f; //第八个LED亮

delay60ms();

}while(1); //无限循环,使8位LED循环流水点亮

}

//实例24:用字符型数组控制P0口8位LED流水点亮

#include //包含单片机寄存器的头文件

/

函数功能:延时约60ms (3*100*200=60000μs)

/

void delay60ms(void)

{

unsigned char m,n;

for(m=0;m<100;m++)

for(n=0;n<200;n++)

;

}

/

函数功能:主函数

/

void main(void)

{

unsigned char i;

unsigned char code Tab[ ]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //定义无符号字符型数组while(1)

{

for(i=0;i<8;i++)

{

P0=Tab[i];//依次引用数组元素,并将其送P0口显示

delay60ms();//调用延时函数

}

}

}

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

#include //包含单片机寄存器的头文件

/

函数功能:延时约150ms (3*200*250=150 000μs=150ms

/

{

unsigned char m,n;

for(m=0;m<200;m++)

for(n=0;n<250;n++)

;

}

/

函数功能:主函数

/

void main(void)

{

unsigned char str[]={"Now,Temperature is :"}; //将字符串赋给字符型全部元素赋值unsigned char i;

while(1)

{

i=0; //将i初始化为0,从第一个元素开始显示

while(str[i]!='\0') //只要没有显示到结束标志'\0'

{

P0=str[i]; //将第i个字符送到P0口显示

delay150ms(); //调用150ms延时函数

i++; //指向下一个待显字符

}

}

}

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

#include

void main(void)

{

unsigned char *p1,*p2; //定义无符号字符型指针变量p1,p2

unsigned char i,j; //定义无符号字符型数据

i=25; //给i赋初值25

j=15;

p1=&i; //使指针变量指向i ,对指针初始化

p2=&j; //使指针变量指向j ,对指针初始化

P0=*p1+*p2; //p1+*p2相当于i+j,所以P0=25+15=40=0x28

//则P0=0010 1000B,结果P0.3、P0.5引脚LED熄灭,其余点亮

while(1)

; //无限循环,防止程序“跑飞”

}

#include

/

函数功能:延时约150ms (3*200*250=150 000μs=150ms

/

void delay150ms(void)

{

unsigned char m,n;

for(m=0;m<200;m++)

for(n=0;n<250;n++)

;

}

/

函数功能:主函数

/

void main(void)

{

unsigned char code Tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

unsigned char *p[ ]={&Tab[0],&Tab[1],&Tab[2],&Tab[3],&Tab[4],&Tab[5],

&Tab[6],&Tab[7]};

unsigned char i; //定义无符号字符型数据

while(1)

{

for(i=0;i<8;i++)

{

P0=*p[i];

delay150ms();

}

}

}

//实例28:用数组的指针控制P0 口8 位LED流水点亮#include

/

函数功能:延时约150ms (3*200*250=150 000μs=150ms

/

void delay150ms(void)

{

unsigned char m,n;

for(m=0;m<200;m++)

for(n=0;n<250;n++)

;

}

函数功能:主函数

/

void main(void)

{

unsigned char i;

unsigned char Tab[ ]={0xFF,0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,

0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,

0xFE,0xFC,0xFB,0xF0,0xE0,0xC0,0x80,0x00,

0xE7,0xDB,0xBD,0x7E,0x3C,0x18,0x00,0x81,

0xC3,0xE7,0x7E,0xBD,0xDB,0xE7,0xBD,0xDB};

//流水灯控制码

unsigned char *p; //定义无符号字符型指针

p=Tab; //将数组首地址存入指针p

while(1)

{

for(i=0;i<32;i++) //共32个流水灯控制码

{

P0=*(p+i); //(p+i)的值等于a[i]

delay150ms(); //调用150ms延时函数

}

}

}

//实例29:用P0 、P1口显示整型函数返回值#include

/

函数功能:计算两个无符号整数的和

/

unsigned int sum(int a,int b)

{

unsigned int s;

s=a+b;

return (s);

}

/

函数功能:主函数

/

void 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

for(n=0;n<200;n++)

;

}

/

函数功能:主函数

/

void main(void)

{

unsigned char i;

unsigned char code Tab[ ]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};

//流水灯控制码

while(1)

{

//快速流水点亮LED

for(i=0;i<8;i++) //共8个流水灯控制码

{

P0=Tab[i];

delay(100); //延时约60ms, (3*100*200=60 000μs)

}

//慢速流水点亮LED

for(i=0;i<8;i++) //共8个流水灯控制码

{

P0=Tab[i];

delay(250); //延时约150ms, (3*250*200=150 000μs)

}

}

}

//实例31:用数组作函数参数控制流水花样

#include

51单片机实例程100讲全集

目录 目录 (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 (15) 实例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:用数组作函数参数控制流水花样 (22) 实例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) 实例40:宏定义应用举例2 (29) 实例41:宏定义应用举例3 (30)

单片机35个实例1(汇编)

1.闪烁灯 1.实验任务 如图4.1.1所示:在P1.0端口上接一个发光二极管L1,使L1在不停地一亮一灭,一亮一灭的时间间隔为0.2秒。 2.电路原理图 图4.1.1 3.系统板上硬件连线 把“单片机系统”区域中的P1.0端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上。

4.程序设计内容 (1).延时程序的设计方法 作为单片机的指令的执行的时间是很短,数量大微秒级,因此, 我们要求的闪烁时间间隔为0.2秒,相对于微秒来说,相差太 大,所以我们在执行某一指令时,插入延时程序,来达到我们 的要求,但这样的延时程序是如何设计呢?下面具体介绍其原 理: 如图4.1.1所示的石英晶体为12MHz,因此,1个机器周期为1微秒 机器周期微秒 MOV R6,#20 2个 2 D1: MOV R7,#248 2个 2 2+2×248 =498 20× DJNZ R7,$ 2个2×248 (498 DJNZ R6,D1 2个2×20=40 10002

因此,上面的延时程序时间为10.002ms。 由以上可知,当R6=10、R7=248时,延时5ms,R6=20、R7 =248时,延时10ms,以此为基本的计时单位。如本实验要求 0.2秒=200ms,10ms×R5=200ms,则R5=20,延时子程序如 下: DELAY: MOV R5,#20 D1: MOV R6,#20 D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET (2).输出控制 如图1所示,当P1.0端口输出高电平,即P1.0=1时,根据 发光二极管的单向导电性可知,这时发光二极管L1熄灭;当 P1.0端口输出低电平,即P1.0=0时,发光二极管L1亮;我 们可以使用SETB P1.0指令使P1.0端口输出高电平,使用 CLR P1.0指令使P1.0端口输出低电平。 5.程序框图

c51单片机实例下载大全

单片机资料教程下载,省去找资料的麻烦,只供学习参考用,下载24内删掉,祝大家学习进步 单片机点阵学习资料 https://www.sodocs.net/doc/7e3958548.html,/thread-1703-1-1.html 手把手教你学单片机--教程视频 https://www.sodocs.net/doc/7e3958548.html,/thread-1688-1-1.html 力天把手教你学单片机视频教程 https://www.sodocs.net/doc/7e3958548.html,/thread-1689-1-1.html 谱中单片机开发板例程 https://www.sodocs.net/doc/7e3958548.html,/thread-1683-1-2.html 初学单片机的30,硬件简单对初学者有帮助 https://www.sodocs.net/doc/7e3958548.html,/thread-1962-1-1.html 用单片机制作的MP3 https://www.sodocs.net/doc/7e3958548.html,/thread-1701-1-2.html 51单片机应用开发大全所含100个范例代码及电路图 https://www.sodocs.net/doc/7e3958548.html,/thread-1820-1-1.html 【含28个单片机实例流程图】 https://www.sodocs.net/doc/7e3958548.html,/thread-1959-1-2.html 谱中单片机程序烧录工具STC https://www.sodocs.net/doc/7e3958548.html,/thread-1682-1-2.html 《单片机技术》32讲

https://www.sodocs.net/doc/7e3958548.html,/thread-1693-1-1.html 51单片机c语言100例教程 https://www.sodocs.net/doc/7e3958548.html,/thread-1700-1-1.html 单片机超级精华包 https://www.sodocs.net/doc/7e3958548.html,/thread-1687-1-1.html 新手学的多功能电子钟 https://www.sodocs.net/doc/7e3958548.html,/thread-1679-1-1.html 十天学会单片机和c语言视频教程 https://www.sodocs.net/doc/7e3958548.html,/thread-1692-1-1.html C语言函数库速查手册 https://www.sodocs.net/doc/7e3958548.html,/thread-1696-1-1.html 历史上最全的KEIL中文学习资料 https://www.sodocs.net/doc/7e3958548.html,/thread-1729-1-2.html 单片机c语言程序设计实训100例--基于AVR+PROTUES https://www.sodocs.net/doc/7e3958548.html,/thread-1695-1-2.html (有电路图和程序) https://www.sodocs.net/doc/7e3958548.html,/thread-1965-1-1.html 关于单片机抗干扰的资料 https://www.sodocs.net/doc/7e3958548.html,/thread-1961-1-1.html 单片机矩阵扫描键盘程序 https://www.sodocs.net/doc/7e3958548.html,/thread-1723-1-1.html 共享通过串口在线调试51单片机的专业版培训资料

单片机应用技术(c语言版 第3版)[王静霞]_习题答案

习题 1 1.1 单项选择题 (1) A (2)C (3)C 1.2 填空题 (1)硬件系统、软件系统 (2)时钟电路、复位电路 (3)XTAL1、XTAL2、RESET、EA (4)晶振 1.3 问答题 什么是单片机它由哪几部分组成什么是单片机应用系统 答:单片微型计算机(Single Chip Microcomputer)简称单片机,是指集成在一个芯片上的微型计算机,它的各种功能部件,包括CPU(Central Processing Unit)、存储器(memory)、基本输入/输出(Input/Output,简称I/O)接口电路、定时/计数器和中断系统等,都制作在一块集成芯片上,构成一个完整的微型计算机。 单片机应用系统是以单片机为核心,配以输入、输出、显示等外围接口电路和控制程序,能实现一种或多种功能的实用系统。 1.4 上机操作题 (1) 参考程序: #include //包含头文件reg51.h,定义了51单片机的专用寄存器 //函数名:delay //函数功能:实现软件延时 //形式参数:无符号整型变量i,控制空循环的循环次数 //返回值:无 void delay(unsigned int i) //延时函数 { unsigned int k; for(k=0;k //包含头文件reg51.h,定义了51单片机的专用寄存器 //函数名:delay

单片机编程100例说课讲解

单片机编程100例

单片机编程实例100例大全 单片机编程实例 *实例1:使用P3口流水点亮8位LED #include //包含单片机寄存器的头文件 / 函数功能:延时一段时间 void delay(void) { unsigned char i,j; for(i=0;i<250;i++) for(j=0;j<250;j++) ; } / 函数功能:主函数 void main(void) { 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(); //调用延时函数 } / / } *实例2:通过对P3口地址的操作流水点亮8位LED #include //包含单片机寄存器的头文件 sfr x=0xb0; //P3口在存储器中的地址是b0H,通过sfr可定义8051内核单片机 //的所有内部8位特殊功能寄存器,对地址x的操作也就是对P1口的操作 / 函数功能:延时一段时间 /

void delay(void) { unsigned char i,j; for(i=0;i<250;i++) for(j=0;j<250;j++) ; //利用循环等待若干机器周期,从而延时一段时间} / 函数功能:主函数 / void main(void) { while(1) { x=0xfe; //第一个灯亮 delay(); //调用延时函数 x=0xfd; //第二个灯亮 delay(); //调用延时函数 x=0xfb; //第三个灯亮 delay(); //调用延时函数 x=0xf7; //第四个灯亮 delay(); //调用延时函数

单片机课后习题答案(《单片机应用技术》C语言版)

MCS-51在通常应用情况下,使用振荡频率为的6MHz或12MHz的晶振,如果系统中使用了单片机的串行口通信,则一般采用振荡频率为11.059MHz的晶振。 1.11 答: 规定一个机器周期的宽度为12个振荡脉冲周期,因此机器周期就是振荡脉冲的十二分频。 当振荡脉冲频率为12 MHz时, 一个机器周期为1μs;当振荡脉冲频率为6 MHz时,一个机器周期为2 μs。 1.12 答: (a)上电复位电路(b)按键复位电路 单片机常见的复位电路 图(a)为上电复位电路,它是利用电容充电来实现的。在接电瞬间,RST 端的电位与VCC相同,随着充电电流的减少,RST的电位逐渐下降。只要保证RST为高电平的时间大于两个机器周期,便能正常复位。 图(b)为按键复位电路。该电路除具有上电复位功能外,若要复位,只需按图(b)中的RESET键,此时电源VCC经电阻R1、R2分压,在RST端产生一个复位高电平。 习题2答案 2.1 单项选择题 (1)C (2)A (3)B (4)A (5)D 2.2 答: 单片机开发过程所用的设备与软件称为单片机开发系统或开发工具。 单片机开发系统包括计算机、单片机在线仿真器、开发工具软件、编程器等。连接方法如下图所示。 单片机开发系统连接方法示意图 2.3 答:单片机应用系统的开发过程如下: 设计电路图→制作电路板→程序设计→硬软件联调→程序下载→产品测试2.4 答: 1.在线仿真功能 在线仿真器(In Circuit Emulator,简称ICE)是由一系列硬件构成的设备,它能仿真用户系统中的单片机,并能模拟用户系统的ROM、RAM和I/O口。因此,在线仿真状态下,用户系统的运行环境和脱机运行的环境完全“逼真”。 2.调试功能 1)运行控制功能 开发系统应能使用户有效地控制目标程序的运行,以便检查程序运行的结果,对存在的硬件故障和软件错误进行定位。 2)单片机状态查看修改功能

51单片机50个实例代码

51单片机50个例程代码程序里有中断,串口等驱动,直接复制即可使用1-IO输出-点亮1个LED灯方法1 /*----------------------------------------------- 名称:IO口高低电平控制 论坛:https://www.sodocs.net/doc/7e3958548.html, 编写:shifang 日期:2009.5 修改:无 内容:点亮P1口的一个LED灯 该程序是单片机学习中最简单最基础的, 通过程序了解如何控制端口的高低电平 ------------------------------------------------*/ #include //包含头文件,一般情况不需要改动, //头文件包含特殊功能寄存器的定义 sbit LED=P1^0;// 用sbit 关键字定义LED到P1.0端口, //LED是自己任意定义且容易记忆的符号 /*------------------------------------------------ 主函数 ------------------------------------------------*/ void main (void) { //此方法使用bit位对单个端口赋值 LED=1; //将P1.0口赋值1,对外输出高电平 LED=0; //将P1.0口赋值0,对外输出低电平 while (1) //主循环 { //主循环中添加其他需要一直工作的程序 } } 2-IO输出-点亮1个LED灯方法2 /*-----------------------------------------------

名称:IO口高低电平控制 论坛:https://www.sodocs.net/doc/7e3958548.html, 编写:shifang 日期:2009.5 修改:无 内容:点亮P1口的一个LED灯 该程序是单片机学习中最简单最基础的, 通过程序了解如何控制端口的高低电平 ------------------------------------------------*/ #include //包含头文件,一般情况不需要改动, //头文件包含特殊功能寄存器的定义 /*------------------------------------------------ 主函数 ------------------------------------------------*/ void main (void) { //此方法使用1个字节对单个端口赋值 P1 = 0xFF; //P1口全部为高电平,对应的LED灯全灭掉, //ff换算成二进制是1111 1111 P1 = 0xfe; //P1口的最低位点亮,可以更改数值是其他的灯点亮 //0xfe是16进制,0x开头表示16进制数, //fe换算成二进制是1111 1110 while (1) //主循环 { //主循环中添加其他需要一直工作的程序 } } 3-IO输出-点亮多个LED灯方法1 /*----------------------------------------------- 名称:IO口高低电平控制 论坛:https://www.sodocs.net/doc/7e3958548.html, 编写:shifang 日期:2009.5 修改:无 内容:点亮P1口的多个LED灯

项目单片机应用技能实训C语言教案

单片机应用技能实训(C语言)教案—项目2 项目2 广告灯电路制作 任务1 MCS-51单片机I/O端口及C语言相关指令

二、教学实施过程 实 施 环 节 教学内容导 学 方 法组 织 教 学 1、检查学生出勤情况并做好记录。 2、调整学生的注意力,为上课作准备。 互 动 交 流复 习 提 问 1、MCS-51单片机由哪几部分组成 2、MCS-51单片机有多少个I/O口引脚 提 问 导 思导 入 夜晚的商业街上,各种各样的广告彩灯光彩夺目,变幻无穷,非常好看。那么功能强大的单片机是否能完成广告彩灯的控制任务呢本项目的任务就是制作一个用单片机控制的广告灯电路。为完成项目制作,先进行相关基本知识的学习。 启 发 学 习 积 极 性讲 授 新 课 一、MCS-51单片机并行接口 1、P0口的结构和工作原理 P0口每一位的结构如图2-2所示,它由一个输出锁存器,上下两个三态缓冲器,一个输出驱动电路和一个输出控制电路组成。 图2-2 P0口的结构 从P0口输出数据的方法有两种,一种是执行以P0口为目的操作数的数据传送指令来实现,另一种是执行以P0口位为目的操作数的位操作指令来实现。分别举例如下: P0=0x66; 12 fsoc 1 ?12 10 6 1 6 ? ? sμ

1、

89C1’ex),默认情况下该项未被选中,如果要写片做硬件实验,就必须选中该项,这一点是初学者易疏忽的,在此特别提醒注意。 4、编译、连接 在设置好工程后,即可进行编译、连接。点击Build target 按钮,对当前工程进行连接,如果当前文件已修改,软件会先对该文件进行编译,然后再连接以产生目标代码。 编译过程中的信息将出现在输出窗口中的Build页中,如果源程序中有语法错误,会有错误报告出现。 三、布置作业学生练习,老师指导。 1、单片机控制广告灯电路的仿真验证。 2、观察现实中广告灯的变化情况,通过改写程序,完成不同的灯光效果。比一比,看谁制作的变化效果又多又好。 3、本项目中采用低电平驱动,是否能采用高电平驱动,试一试,想想为什么利用多媒体或机房相关软件进行操作演示。讲解各步骤的含义。 讲解各步骤的含义。完成程序编译后,展示仿真效果。 课堂小结1、proteus的基本操作步骤。 2、keil的操作步骤。

51单片机仿真实例

51单片机仿真实例 l示例6—扫描与判断—(单端口)位扫描与字节(多端口)扫描 这是一个常用程序段—子程序—标准程序, 通过端口扫描而获得输入数据或控制输出数据,达到节 省位或字节的目的—节约硬件资源。 关于扫描,可以从位及其取反实现流水灯着手来理解。 可以通过移位实现流水灯—扫描。可以通过字节数据(01H,02H,04H,08H,10H,20H,40H,80H—阳极管)的端口发送实现流水灯—扫描。可以通过数据表(DB01H,02H,04H,08H,10H,20H,40H,80H—阴极管)实现流水灯—扫描。可以通过循环跳转实现流水灯—扫描。扫描注意入比出查—获得输入要比 较数据、发送输出要检查出口 扫描获取端口字节 扫描输出位移动产生动态效果(01、02、04、08、10、20、40、80),可以用字节表 扫描输出字符字节,通过延时可以变换字符以便造成数 字进位效果

ORG 0000H START: dbufequ30h;置存储区首址tempequ40h;置缓冲区首址org 00h mov 30h,#2 ;存入数据mov 31h,#0 mov 32h,#1 mov 33h,#0 mov 34h,#7 mov 35h,#1 mov r0,#dbuf mov r1,#temp

mov r2,#6;六位显示器 mov dptr,#segtab ;段码表首地址dp00:mov a,@r0 ;取要显示的数据 movc a,@a+dptr ;查表取段码mov @r1,a;段码暂存 inc r1 inc r0 djnz r2,dp00 disp0:mov r0,#temp;显示子程序mov r1,#6;扫描6次 mov r2,#01h;从第一位开始 dp01:mov a,@r0 mov p2,a;段码输出 mov a,r2 ;取位码 mov p1,a;位码输出 acall delay;调用延时 mov a,r2 rl a mov r2,a inc r0 djnz r1,dp01

最新项目9单片机应用技能实训(C语言)教案教学内容

单片机应用技能实训(C语言)教案—项目9 项目9 点阵LED屏显示电路制作 任务1 项目相关知识学习

二、教学实施过程 实施环节教学内容导学方法组织教学1、检查学生出勤情况并做好记录。 2、调整学生的注意力,为上课作准备。 互动交流 复习提问1、项目8中数码管的显示方式是动态显示还是静态显示? 2、以同学们的理解,LED屏是什么? 本项目的终极目标是制作一个单片机控制的LED屏显示电路。 提问导思 导入在项目6和项目8中,用数码管来显示数字,也可以用来显示一些字符,但是,显示字符时有一定局限性,所以,当要显示一 些英文字符时,考虑用LED屏。在进行项目制作之前,学习LED 屏的相关知识。启发学习积极性 讲授新课一、LED点阵显示模块的结构、工作原理及显示方式 1、LED点阵显示模块结构及工作原理 LED点阵显示模块是一种能显示图形、字符和汉字的显示器件。一个LED点阵显示模块一般由8×8个LED发光二极管方阵组成,其外形如图9-2所示。8×8LED点阵显示模块原理结构如图9-3所示。我们可以把每一个LED发光点理解为一个像素,8×8点阵显示屏可以显示在64像素范围内的任何图形。 图9-3 图9-2 2、LED点阵显示模块的显示方式 LED点阵显示模块的显示方法必须采用动态扫描方式,一般采用逐行扫描。以图9-3所示为例,一幅图形的每行由一个8位二进制数据构成,将这些数据称为显示数据点阵码。比如显示字符“O”的点阵码为:3CH、42H、42H、42H、42H、42H、42H、3CH(如图9-4所示)。一般显示汉字采用的是16×16的点阵模式或者更多,但是原理是相同的。用多媒体展示图9-2、图9-3。对照图9-3介绍其工作原理。 细致说明点阵码的含义。

单片机应用技术(C语言)试题

一、选择题 1、单片机8031的/EA引脚(C)。 A. 可悬空 B. 必须接+5V电源 C. 必须接地 D. 以上三种情况视需要而定 2、MCS-51单片机的4个并行I/O端口作为通用I/O端口使用,在输出数据时,必须外接上拉电阻的是(A)。 A. P0口 B. P1口 C. P2口 D. P3口 3、当MCS-51单片机应用系统需要扩展外部存储器或其它接口芯片时,(A)可作为低8位地址总线使用。 A. P0口 B. P1口 C. P2口 D. P0口和P2口 4、系统复位后,堆栈指针SP的内容是(B)。 A. 08H B. 07H C. 30H D. 50H 5、MCS-51单片机的位寻址区位于内部RAM的( D )单元。 A. 00H~7FH B. 20H~7FH C. 00H~1FH D. 20H~2FH 6、PSW中的RS1和RS0用来(A)。 A. 选择工作寄存器组 B. 指示复位 C. 选择定时器 D. 选择工作方式 7、MCS-51单片机规定一个机器周期共有(A)个节拍。 A. 12 B. 6 C. 8 D. 16 8、下面叙述不正确的是(C)。 A. 一个C源程序可以由一个或多个函数组成 B. 一个C源程序必须包含一个函数main() C. 在C51中,注释说明只能使用/*……*/注释 D. C程序的基本组成单位是函数 9、在C51程序中常常把(D)作为循环体,用于消耗CPU时间,产生延时效果。 A. 赋值语句 B. 表达式语句 C. 循环语句 D. 空语句 10、在单片机应用系统中,LED数码管显示电路通常有(C )显示方式。 A. 静态 B. 动态 C. 静态和动态 D. 查询 11、共阳极LED数码管加反向器驱动时显示字符“6”的段码是(B)。 A. 06H B. 7DH C. 82H D. FAH 12、LED数码管若采用动态显示方式,下列说法错误的是(C)。 A. 将各位数码管的段选线并联 B. 将段选线用一个8位I/O端口控制 C. 将各位数码管的公共端直接连接在+5V或者GND上 D. 将各位数码管的位选线用各自独立的I/O端口控制 13、按键开关的结构通常是机械弹性元件,在按键按下和断开时,触点在闭合和断开瞬间会产生接触不稳定,为消除抖动引起的不良后果,常采用的方法有(C)。 A. 硬件去抖动 B. 软件去抖动 C. 硬、软件两种方法 D. 单稳态电路去抖方法

单片机应用技术C语言版

1.1单片微型计算机(Single Chip Microcomputer)简称单片机,是指集成在一个芯片上的微型计算机,它的各种功能部件,包括CPU(Central Processing Unit)、存储器(memory)、基本输入/输出(Input/Output,简称I/O)接口电路、定时/计数器和中断系统等 1.2软件是在硬件的基础上对其资源进行合理调配和使用,从而完成应用系统所要求的任务,二者相互依赖,缺一不可 1.3单片机的发展经历了由4位机到8位机,再到16位机的发展过程 1.4中央处理器CPU:8位,运算和控制功能 内部RAM:共256个RAM单元,用户使用前128个单元, 用于存放可读写数据,后128个单元被专用寄存器占用。 内部ROM:4KB掩膜ROM,用于存放程序、原始数据和表格。 定时/计数器:两个16位的定时/计数器,实现定时或计数功能。 并行I/O口:4个8位的I/O口P0、P1、P2、P3。 串行口:一个全双工串行口。 中断控制系统:5个中断源(外中断2个,定时/计数中断2个,串行中断1个) 时钟电路:可产生时钟脉冲序列,允许晶振频率6MHZ和12MHZ 1.5按键手动复位,有电平方式和脉冲方式两种。 1.6寄存器SP的复位电路07H 寄存器P0-P3的复位电路FFH 寄存器PC的复位电路0000H 寄存器B的复位电路00H 1.7单片机的时序概念从小到大依次是:节拍、状态、机器周期和指令周期 1.8机器周期:一个机器周期分为6个状态:S1~S6。每个状态又分为两拍:P1和P2 1.9指令周期:是执行一条指令所需的机器周期数。 1.10P0口:双向8位三态I/O口,此口为地址总线(低8位)及数据总线分时复用口,可驱动8个LS型TTL负载。 1.11 P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 INT0*(外部中断0) P3.3 INT1*(外部中断1) P3.4 T0(定时器0外部计数输入) P3.5 T1(定时器1外部计数输入) P3.6 WR*(外部数据存储器写选通) P3.7 RD*(外部数据存储器读选通) 1.12P0口输出高电平必须接上拉电阻。P1~P3口输出高电平不必接上拉电阻。 1.13对SFR只能使用直接寻址方式,书写时可使用寄存器符号,也可用寄存器单元地址。 1.14直接寻址:直接通过地址访问(00H~7FH) 1.15 data 直接访问内部数据存储器(128字节),访问速度最快 1.16C5l的数据类型有位型(bit)、无符号字符(unsigned char)、有符号字符(signed char)、无符号整型(unsigned int)、有符号整型(signed int)、无符号长型(unsigned long)、有符号长型(signed long)、浮点(float)和指针类型等。其中short与long属整型数据、float与double 型属浮点型数据。 1.17bit flag; // 将flag定义为位变量sfr P1 = 0x90; //定义P1口,地址90H #define uchar unsigned char宏定义 sbit P1_0=P1^0变量声明 void delay(uchar i);被调函数声明void main() 定义主函数

C51单片机实战100例

目录 目录 1 函数的使用和熟悉 6 实例3:用单片机控制第一个灯亮7 实例4:用单片机控制一个灯闪烁:认识单片机的工作频率7 实例5:将P1口状态分别送入P0、P2、P3口:认识I/O口的引脚功能8

实例6:使用P3口流水点亮8位LED 9 实例7:通过对P3口地址的操作流水点亮8位LED 11 实例8:用不同数据类型控制灯闪烁时间13 实例9:用P0口、P1 口分别显示加法和减法运算结果15 实例10:用P0、P1口显示乘法运算结果15 实例11:用P1、P0口显示除法运算结果16 实例12:用自增运算控制P0口8位LED流水花样17 实例13:用P0口显示逻辑"与"运算结果18 实例14:用P0口显示条件运算结果18 实例15:用P0口显示按位"异或"运算结果 19 实例16:用P0显示左移运算结果19 实例17:"万能逻辑电路"实验20 实例18:用右移运算流水点亮P1口8位LED 20 实例19:用if语句控制P0口8位LED的流水方向 22 实例20:用swtich语句的控制P0口8位LED的点亮状态23 实例21:用for语句控制蜂鸣器鸣笛次数25 实例22:用while语句控制LED 27 实例23:用do-while语句控制P0口8位LED流水点亮29 实例24:用字符型数组控制P0口8位LED流水点亮30 实例25:用P0口显示字符串常量 32 实例26:用P0 口显示指针运算结果33 实例27:用指针数组控制P0口8位LED流水点亮34

实例28:用数组的指针控制P0 口8 位LED流水点亮35 实例29:用P0 、P1口显示整型函数返回值37 实例30:用有参函数控制P0口8位LED流水速度38 实例31:用数组作函数参数控制流水花样40 实例32:用指针作函数参数控制P0口8位LED流水点亮41 实例33:用函数型指针控制P1口灯花样44 实例34:用指针数组作为函数的参数显示多个字符串45 实例35:字符函数ctype.h应用举例48 实例36:内部函数intrins.h应用举例48 实例37:标准函数stdlib.h应用举例49 实例38:字符串函数string.h应用举例 51 实例39:宏定义应用举例2 52 实例40:宏定义应用举例2 52 实例41:宏定义应用举例3 53 中断、定时器54 实例42:用定时器T0查询方式P2口8位控制LED闪烁54 实例43:用定时器T1查询方式控制单片机发出1KHz音频55 实例44:将计数器T0计数的结果送P1口8位LED显示56 实例45:用定时器T0的中断控制1位LED闪烁57 实例46:用定时器T0的中断实现长时间定时59 实例47:用定时器T1中断控制两个LED以不同周期闪烁60 实例48:用计数器T1的中断控制蜂鸣器发出1KHz音频62

单片机应用技术(C语言~)教学大纲

单片机应用技术(C语言)教学大纲 一、说明 1、课程的性质和内容 本课程是高级技校应用电子专业的专业课。主要内容包括:认识单片机,点亮彩灯,简易数字钟,简易计算器,键控彩灯,简易频率计,单片机双机通信,简易波形发生器,简易数字电压表,移动字幕的制作,校园打铃系统。 2、课程的任务和要求 本课程的主要任务是让学生熟悉AT89S51系列单片机的硬件结构,会使用常见的单片机外围器件,会用单片机组成具有特定功能电子电路,能用C语言编程驱动单片机AT89S51完成各种基本控制功能,能用单片机实现简单的系统电路,具备初步的单片机应用开发能力。 通过本课程的学习,学生应达到以下几个方面的要求: (1)熟悉单片机AT89S51的结构、引脚功能及工作原理。 (2)熟悉C语言程序的编写方法。 (3)能设计以单片机为核心、相关外围电路组成并能完成特定功能的电路。 (4)能根据单片机的工作原理和外围电路的功能要求进行软件设计,会分析程序设计思路和设计方法。 (5)具有初步的单片机控制应用系统硬件和软件设计能力。 3、教学中应注意的问题 (1)教学中注意以学生为中心,做到教师边讲解边演示,学生边学边练习实践,培养学生的应用开发能力。 (2)任课教师应根据本学校设备及学生的具体情况进行教学。 (3)在教学实施过程中,教师应多联系生产实际和相关课程,还可选用一些更合适的应用实例进行讲解,以激发学生的兴趣,培养学生解决实际问题的能力。 (4)教学中应根据学生情况掌握好讲练比例,充分利用多媒体设备、实验设备和实验电路等进行直观教学。 二、学时分配表

三、教学要求、内容及建议 课题一认识单片机 教学要求 1、熟悉AT89S51的PDIP40\TQFP44和PLCC44三种封装形式,熟练掌握AT89S51单片机的各引脚功能。 2、掌握用AT89S51构成的单片机最小系统及各部分电路的功能。 3、认识实验电路板上的主要元器件包括AT89S51单片机、晶体振荡器、锁存器74HC573、MAX232芯片、RS-232串口端、数码管显示电路、发光二极写显示电路、键盘电路、排阻等元件。 4、会正确插装电路元件,能优质焊接电路元件。 5、会正确使用压线钳,良好压接连接线和下载线的金属插头;熟悉下载线的作有和使用方法。 教学内容 1、认识单片机AT89S51及引脚功能。 2、安装单片机最小系统及实验电路,并认识单片机最小系统的外围扩展电路。 3、正确无误地安装实验电路板和下载线,并进行检查。 教学建议 着重介绍AT89S51引脚功能。 课题二点亮彩灯 教学要求 1、理解单片机端口控制外接彩灯电路的工作原理。

51单片机仿真100实例

《单片机C语言程序设计实训100例—基于8051+Proteus仿真》案例 第01 篇基础程序设计 01 闪烁的LED /* 名称:闪烁的LED 说明:LED按设定的时间间隔闪烁 */ #include #define uchar unsigned char #define uint unsigned int sbit 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 #include #define uchar unsigned char #define uint unsigned int

//延时 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_形成来回滚动的效果*/ #include #include #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) {

51单片机C语言编程100例

目录 实例3:用单片机控制第一个灯亮 (3) 实例4:用单片机控制一个灯闪烁:认识单片机的工作频率 (3) 实例5:将 P1口状态分别送入P0、P2、P3口:认识I/O口的引脚功能 (4) 实例6:使用P3口流水点亮8位LED (4) 实例7:通过对P3口地址的操作流水点亮8位LED (5) 实例8:用不同数据类型控制灯闪烁时间 (6) 实例9:用P0口、P1 口分别显示加法和减法运算结果 (8) 实例10:用P0、P1口显示乘法运算结果 (8) 实例11:用P1、P0口显示除法运算结果 (9) 实例12:用自增运算控制P0口8位LED流水花样 (9) 实例13:用P0口显示逻辑"与"运算结果 (10) 实例14:用P0口显示条件运算结果 (10) 实例15:用P0口显示按位"异或"运算结果 (10) 实例16:用P0显示左移运算结果 (10) 实例17:"万能逻辑电路"实验 (11) 实例18:用右移运算流水点亮P1口8位LED (11) 实例19:用if语句控制P0口8位LED的流水方向 (12) 实例20:用swtich语句的控制P0口8位LED的点亮状态 (12) 实例21:用for语句控制蜂鸣器鸣笛次数 (14) 实例22:用while语句控制LED (15) 实例23:用do-while语句控制P0口8位LED流水点亮 (16) 实例24:用字符型数组控制P0口8位LED流水点亮 (16) 实例25:用P0口显示字符串常量 (17) 实例26:用P0 口显示指针运算结果 (18) 实例27:用指针数组控制P0口8位LED流水点亮 (18) 实例28:用数组的指针控制P0 口8 位LED流水点亮 (19) 实例29:用P0 、P1口显示整型函数返回值 (20) 实例30:用有参函数控制P0口8位LED流水速度 (21) 实例31:用数组作函数参数控制流水花样 (22) 实例32:用指针作函数参数控制P0口8位LED流水点亮 (23) 实例33:用函数型指针控制P1口灯花样 (24) 实例34:用指针数组作为函数的参数显示多个字符串 (25) 实例35:字符函数ctype.h应用举例 (26) 实例36:内部函数intrins.h应用举例 (27) 实例37:标准函数stdlib.h应用举例 (27) 实例38:字符串函数string.h应用举例 (28) 实例39:宏定义应用举例2 (28) 实例40:宏定义应用举例2 (29) 实例41:宏定义应用举例3 (29) 实例42:用定时器T0查询方式P2口8位控制LED闪烁 (30) 实例43:用定时器T1查询方式控制单片机发出1KHz音频 (31) 实例44:将计数器T0计数的结果送P1口8位LED显示 (31)

51单片机交通灯实例,带仿真电路图(汇编)

ORG 0000H JMP MAIN ORG 000BH JMP INT_T0 ORG 001BH JMP INT_T1 ORG 003BH MAIN:MOV TMOD,#61H MOV TH0 ,#3CH MOV TL0 ,#0B0H MOV TH1 ,#0F9H MOV TL1 ,#0F9H SETB ET1 SETB ET0 SETB TR1 SETB TR0 SETB EA MOV P0,#0CH MOV R0,#70 MOV R1,#00H MOV R2,#35 MOV B ,#10 MOV R3,#40 MOV R4,#5 MOV R5,#0FFH JMP $ INT_T0: MOV TH0,#3CH MOV TL0,#0B0H CPL P3.0 RETI INT_T1: DEC R0 CJNE R0,#40,D1 MOV P0,#0AH MOV R1,#01H D1: CJNE R0,#39,D2 CPL P0.1 D2: CJNE R0,#38,D3 CPL P0.1 D3: CJNE R0,#37,D4 CPL P0.1 D4: CJNE R0,#36,D5 CPL P0.1

D5: CJNE R0,#35,D6 MOV P0,#21H MOV R1,#02H D6: CJNE R0,#5 ,D7 MOV P0,#11H MOV R1,#03H D7: CJNE R0,#4 ,D8 CPL P0.4 D8: CJNE R0,#3 ,D9 CPL P0.4 D9: CJNE R0,#2 ,D10 CPL P0.4 D10: CJNE R0,#1 ,D11 CPL P0.4 D11: CJNE R0,#0 ,D12 MOV P0,#0CH MOV R1,#00H MOV R0,#70 D12: CJNE R1,#00H,B1 MOV A,R0 SUBB A,R2 LCALL D_To_H MOV P1,A MOV A,R0 SUBB A,R3 LCALL D_To_H MOV P2,A B1: CJNE R1,#01H,B2 MOV P2,#00H MOV A,R0 SUBB A,R2 LCALL D_To_H MOV P1,A B2: CJNE R1,#02H,B3 MOV A,R0 LCALL D_To_H MOV P2,A MOV A,R0 SUBB A,R4 LCALL D_To_H MOV P1,A B3: CJNE R1,#03H,B4 MOV P1,#00H MOV P2,R0

单片机课后习题答案(《单片机应用技术》C语言版)

习题1答案 1.1 单项选择题 (1) A (2)C (3)A (4) A (5)A (6) A (7)C (8)C (9) D (10)C 1.2 填空题 (1)硬件系统、软件系统 (2)时钟、复位 (3)XTAL1、XTAL2、RST、 (4)片内数据存储器、片内程序存储器、片外数据存储器、片外程序存储器 (5)时钟电路 (6)程序存储器 (7)工作寄存器组、位寻址区、用户RAM区 (8)1us、2us (9)上电复位电路、按键复位电路 (10)2、高 1.3 答: 单片微型计算机是指集成在一个芯片上的微型计算机,它的各种功能部件,包括CPU (Central Processing Unit)、随机存取存储器RAM(Random Access Memory)、只读存储器ROM(Read-only Memory)、基本输入/输出(Input/Output,简称I/O)接口电路、定时器/计数器等都制作在一块集成芯片上,构成一个完整的微型计算机,可以实现微型计算机的基本功能。 单片机应用系统是以单片机为核心,配以输入、输出、显示、控制等外围电路和软件,能实现一种或多种功能的实用系统。 单片机应用系统是由硬件和软件组成的,硬件是应用系统的基础,软件则是在硬件的基础上对其资源进行合理调配和使用,从而完成应用系统所要求的任务,二者相互依赖,缺一不可。 1.4 答: 1.5 答:片内RAM低128单元的配置如下:

单元,既可作为一般RAM单元使用,进行字节操作,也可以对单元中每一位进行位操作;在内部RAM低128单元中,通用寄存器占去了32个单元,位寻址区占去了16个单元,剩下80个单元,这就是供用户使用的一般RAM区,其单元地址为30H~7FH。 片内RAM高128单元安排有21个特殊功能寄存器,其他空闲单元用户不能使用。 1.6 答:有21个可寻址的特殊功能寄存器,它们不连续地分布在片内RAM的高128单元中,尽管其中还有许多空闲地址,但用户不能使用。另外还有一个不可寻址的特殊功能寄存器,即程序计数器PC,它不占据RAM单元,在物理上是独立的。 在可寻址的21个特殊功能寄存器中,有11个寄存器不仅可以字节寻址,也可以进行位寻址。 1.7 答: 程序状态字是一个8位寄存器,用于存放程序运行中的各种状态信息。其中有些位的状态是根据程序执行结果,由硬件自动设置的,而有些位的状态则由软件方法设定。PSW的位状态可以用专门指令进行测试,也可以用指令读出。PSW的各位定义下表所示。 PSW位定义 存放算术运算的进位标志,在进行加或减运算时,如果操作结果最高位有进位或借位,则CY由硬件置“1”,否则被清“0”;二是在位操作中,作累加位使用。位传送、位与位或等位操作,操作位之一固定是进位标志位。 ·AC(PSW.6):辅助进位标志位。在进行加或减运算中,若低4位向高4位进位或借位,AC由硬件置“1”,否则被清“0”。在BCD码调整中也要用到AC位状态。 ·F0(PSW.5):用户标志位。这是一个供用户定义的标志位,需要利用软件方法置位或复位,用来控制程序的转向。 ·RS1和RS0(PSW.4,PSW.3):工作寄存器组选择位。它们被用于选择CPU当前使用的通用寄存器组。通用寄存器共有4组,其对应关系如下表所示。 工作寄存器组选择 这两个选择位的状态是由软件设置的,被选中的寄存器组即为当前通用寄存器组。但当单片机上电或复位后,RS1 RS0=00。

相关主题