单片机入门小程序

更新时间:2023-10-13 18:34:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

51单片机的学习是一个动手实践的过程,很多同学在学习单片机的初期总是觉得很难,无法入门。本人根据自己的学习经历,结合自己刚学习单片机的体验,写下几个小的程序供大家参考,如能掌握如下几个小程序的思想与精髓,那么就已经探踏入了单片机的大门。学习单片机的核心就是动手实践,当我们通过自己的努力把第一个LED点亮时,我们就会信心加倍,之后的学习就会变得轻松!希望对大家有所帮助。

一个LED闪烁 #include sbit led=P0^3; unsigned int a; void main() { P0=0x00; while(1) {a=100000; led=1; while(a--); a=10000; led=0; while(a--); } }

两个led闪烁 #include

#define uchar unsigned char #define uint unsigned int void delay(); void main() {

while(1) { P0=0xaa; delay(); P0=0x00; delay(); } }

void delay() { uchar x,y; for(x=110;x>0;x--) for(y=120;y>0;y--); }

流水灯

#include #include void delay(); void main() { unsigned char temp;

P0=0xef; temp=P0; delay(); while(1) { temp=_crol_(temp,1); delay(); } }

void delay() { unsigned char x,y; for(x=40;x>0;x--) for(y=200;y>0;y--); }

键控移位信号灯 #include #include

#define uchar unsigned char #define uint unsigd neint sbit k1=P1^0; sbit k2=P1^1;

void delay(uchar z); void main() {

P0=0X18; while(1) { if(k1) P0=_crol_(P0,1); if(k2) P0=_cror_(P0,1); } }

void delay(uchar z) { uchar x,y; for(x=z;x>0;x--) for(y=120;y>0;y--) ;}

中断的简单应用

1. 利用定时器中断实现LED闪烁

#include

#define uchar unsigned char #define uint unsigned int sbit led1=P1^0; uchar num; void main() { P1=0x00;

TMOD=0x01; TH0=(65536-45872)/265; TL0=(65536-45872)%6; EA=1; ET0=1; TR0=1; while(1); }

void T0_time()interrupt 1 { TH0=(65536-45872)/256; TL0=(65536-45872)%6; num++; if(num==20) { num=0; led1=~led1; } }

2. 数码管记录LED闪的次数

#include

#define uchar unsigned char #define uint unsigned int sbit led=P1^2;

void display(uchar,uchar);

uchar num=0,num1=0,num2=0,shi=0,ge=0;

uchar code array[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07}; void main() {

TMOD=0x11;

TH0=(65536-45872)/256; TL0=(65536-45872)%6; TH1=(65536-45872)/256; TL1=(65536-45872)%6; EA=1; ET0=1; ET1=1; TR0=1; TR1=1; while(1); {

display(shi,ge); } }

void display(uchar shi,uchar ge) {

P2=0x03;

// P1^0=array[shi];

// P1^1=array[ge]; }

/*void delay(z) {

uchar x,y;

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

void Time0() interrupt 1 {

TH0=(65536-45872)/256; TL0=(65536-45872)%6; num++; if(num==4) {

num=0; led=~led; } }

void Time1() interrupt 2 {

TH1=(65536-45872)/256; TL1=(65536-45872)%6; num1++; if(num1==20) {

num1=0; num2++;

if(num2==60) num2=0;

shi=(num2)/10; ge=(num2); } }

数码管的动态显示 #include

#define uchar unsigned char #define uint unsigned int

uchar code duan[9]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07}; void delay(); void main() {

while(1) {

P2=0x7f; P0=0x3f;

delay();

P2=0xbf; P0=0x06; delay();

P2=0xdf; P0=0x5b; delay();

P2=0xef; P0=0x4f; delay();

P2=0xf7; P0=0x66; delay();

P2=0xfb; P0=0x6d; delay();

P2=0xfd; P0=0x7d; delay();

P2=0xfe; P0=0x07; delay(); } }

void delay() {

uint x,y;

for(x=10;x>0;x--) for(y=10;y>0;y--); }

数码管的静态显示

#include

#define uchar unsigned char #define uint unsigned int

uchar code arry[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; void delay(uint z); void main() {

P2=0x00; while(1)

{

uchar i;

for(i=0;i<10;i++) { P0=arry[i]; delay(500); } } }

void delay(uint z) {

uint x,y;

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

数码管显示8

#include void main() {

P2=0x7f; //位选端低电平有效

P0=0x7f; //段选高电平有效(共阴) while(1); }

AD转换

#include #include

#define uchar unsigned char sbit wr=P3^6; sbit rd=P3^7; sbit dula=P2^6; sbit wela=P2^7;

uchar code shuma[]=

{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; void delay(uchar z) {

uchar x,y;

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

void display(uchar bai,uchar shi,uchar ge) {

dula=1;

P0=shuma[bai]; dula=0; P0=0xff; wela=1; P0=0x7e;

wela=0; delay(10);

dula=1;

P0=shuma[shi]; dula=0; P0=0xff; wela=1; P0=0x7d; wela=0; delay(10);

dula=1;

P0=shuma[ge]; dula=0; P0=0xff; wela=1; P0=0x7b; wela=0; delay(10); }

void main() {

uchar A,B,C,i,adresult; float wela=1;

P0=0x7f;//开ADCS wela=0; while(1) {

wr=1; _nop_(); wr=0; _nop_(); wr=1; _nop_();

for(i=0;i<10;i++) {display(A,B,C);} P1=0Xff; rd=1; _nop_(); rd=0; _nop_(); rd=1;

adresult=P1;

// =(adresult*5)/256;

A=adresult/256;

B=adresult%6/16; C=adresult%6; }

LCD1602显示

#include

#define uchar unsigned char sbit lcden=P3^4; //使能端

sbit lcdrs=P3^5;//写数据,写命令控制端 //sbit lcdrw=P3^6; #define lcd P0

void delay(uchar z) //延时函数 {

uchar x,y;

for(x=z;x>0;x--) for(y=120;y>0;y--); }

void write_data(uchar Data)//写数据 {

lcden=0; lcdrs=1; lcden=1; delay(10); lcd=Data; lcden=0; delay(10); }

void write_commend(uchar com) //写命令 {

lcden=0; lcdrs=0; lcden=1; delay(10); lcd=com; lcden=0; delay(10); }

void initial() //初始化函数 、 {

write_commend(0x01);//清屏 write_commend(0x38); write_commend(0x0c); write_commend(0x06); }

void main() {

uchar i,j;

uchar fei[]=\ uchar benfei[]=\// lcdrw=0; initial(); // while(1);

write_commend(0x80); // write_data('f'); // write_data('e'); // write_data('i'); // write_data('f'); // write_data('e'); // write_data('i'); // write_data('f'); // write_data('l'); for(j=0;j<6;j++) write_data(fei[j]);

write_commend(0xc2); for(i=0;i<11;i++) write_data(benfei[i]); }

1602显示AD转换结果

#include

#define uchar unsigned char sbit lcden=P3^4; //使能端

sbit lcdrs=P3^5;//写数据,写命令控制端 //sbit lcdrw=P3^6; #define lcd P0

void delay(uchar z) //延时函数 {

uchar x,y;

for(x=z;x>0;x--) for(y=120;y>0;y--); }

void write_data(uchar Data)//写数据 {

lcden=0; lcdrs=1; lcden=1; delay(10); lcd=Data; lcden=0; delay(10); }

void write_commend(uchar com) //写命令 {

lcden=0; lcdrs=0;

lcden=1; delay(10); lcd=com; lcden=0; delay(10); }

void initial() //初始化函数 、 {

write_commend(0x01);//清屏 write_commend(0x38); write_commend(0x0c); write_commend(0x06); }

void main() {

uchar i,j;

uchar fei[]=\ uchar benfei[]=\// lcdrw=0; initial(); // while(1);

write_commend(0x80); // write_data('f'); // write_data('e'); // write_data('i'); // write_data('f'); // write_data('e'); // write_data('i'); // write_data('f'); // write_data('l'); for(j=0;j<6;j++) write_data(fei[j]);

write_commend(0xc2); for(i=0;i<11;i++) write_data(benfei[i]); }

直流电机

#include

#define uchar unsigned char sbit wr=P3^6; sbit csda=P3^2; sbit s1=P3^4;//加速 //sbit s2=P3^5;//减速 sbit wela=P2^7; sbit dula=P2^6;

uchar num2,num1,n,A2,A3; uchar k=5;

本文来源:https://www.bwwdw.com/article/x91f.html

Top