单片机程序汇总大家参考一下Word格式.docx

上传人:b****5 文档编号:17082412 上传时间:2022-11-28 格式:DOCX 页数:19 大小:408.48KB
下载 相关 举报
单片机程序汇总大家参考一下Word格式.docx_第1页
第1页 / 共19页
单片机程序汇总大家参考一下Word格式.docx_第2页
第2页 / 共19页
单片机程序汇总大家参考一下Word格式.docx_第3页
第3页 / 共19页
单片机程序汇总大家参考一下Word格式.docx_第4页
第4页 / 共19页
单片机程序汇总大家参考一下Word格式.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

单片机程序汇总大家参考一下Word格式.docx

《单片机程序汇总大家参考一下Word格式.docx》由会员分享,可在线阅读,更多相关《单片机程序汇总大家参考一下Word格式.docx(19页珍藏版)》请在冰豆网上搜索。

单片机程序汇总大家参考一下Word格式.docx

//下锯齿送入2#DAC

DAOUT=num;

//两路同时进行D/A转换输出

}

/*发送程序*/

#defineucharunsignedchar

charcodemap[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};

//'

0'

~'

9'

voiddelay(unsignedinttime){

unsignedintj=0;

for(;

time>

0;

time--)

for(j=0;

j<

125;

j++);

voidmain(void){

ucharcounter=0;

//定义计数器

TMOD=0x20;

//T1定时方式2

TH1=TL1=0xf4;

//2400b/s

PCON=0;

//波特率不加倍

SCON=0x50;

//串口方式1,TI和RI清零,允许接收;

TR1=1;

//启动T1

while

(1){

SBUF=counter;

//发送联络信号

while(TI==0);

//等待发送完成

TI=0;

//清TI标志位

while(RI==0);

//等待乙机回答

RI=0;

if(SBUF==counter){//若返回值与发送值相同,组织新数据

P2=map[counter];

//显示已发送值

if(++counter>

9)counter=0;

//修正计数器值

delay(500);

/*接收程序*/

ucharreceiv;

//定义接收缓冲

TH1=TL1=0xf4;

//2400b/s

SCON=0x50;

//串口方式1,TI和RI清零,允许接收;

//启动T1

while

(1){

while(RI==1){//等待接收完成

RI=0;

//清RI标志位

receiv=SBUF;

//取得接收值

SBUF=receiv;

//结果返送主机

while(TI==0);

//等待发送结束

TI=0;

//清TI标志位

P2=map[receiv];

//显示接收值

第六章

方式一。

查询方式:

sbitP2_0=P2^0;

voidmain(void){

TMOD=0x01;

//T0定时方式1

TR0=1;

//启动T0

for(;

;

){

TH0=0xfc;

//装载计数初值

TL0=0x18;

do{}while(!

TF0);

//查询等待TF0复位

P2_0=!

P2_0;

//定时时间到P1.0反相

TF0=0;

//软件清TF0

中断方式:

voidtimer0(void)interrupt1{

P2_0=!

//P1.0取反

//计数初值重装载

P2_0=0;

TH0=0xfc;

//预置计数初值

TL0=0x18;

EA=1;

ET0=1;

do{}while

(1);

方式2

中断方式

timer0()interrupt1{//T0定时中断

//P1.0取反

main(){

TMOD=0x02;

//T0定时方式2

TH0=TL0=0x06;

EA=ET0=1;

while

(1);

unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,0x7f,0x6f};

unsignedcharcount=0;

//计数器赋初值

int0_srv()interrupt1{//T0中断函数

if(++count==100)count=0;

//判断循环是否超限

P0=table[count/10];

//显示十位数

P2=table[count%10];

//显示个位数

}

P0=P2=table[0];

//显示初值“00”

TMOD=0x06;

//T0计数方式2

TH0=TL0=0xff;

//计数初值

//开中断

//启动T0

计数

sbitP3_0=P3^0;

voidmain(){

TMOD=0x06;

//设置为T0计数方式2

TL0=0xff;

//初值0xff可使1个外来脉冲即产生溢出

TR0=1;

//启动计数器

while

(1){

while(!

//等待首次溢出

//清TF0溢出标志

//设置为T0定时方式2

TL0=0x06;

//500微秒定时初值

P3_0=0;

//等待再次溢出

P3_0=1;

//设置为T0计数方式2

//1次溢出计数初值

uchartime;

//中断次数

ucharperiod=250;

//1个周期的次数

ucharhigh=50;

//20%高电平的次数

timer0()interrupt1{//T0中断函数

TH0=0xd1;

//重装载计数初值

TL0=0x20;

if(++time==high)P2=0;

//高电平时间到,P2变低

elseif(time==period)

{time=0;

P2=1;

}//周期时间到,P2变高

//T0定时方式1

TH0=0xd1;

//首次装入计数初值

TL0=0x20;

EA=ET0=1;

do{}while

(1);

#include<

#defineucharunsignedchar

bitldelay=0;

//长定时溢出标记

uchart=0;

//定时溢出次数

voidmain(void){

ucharcodeledp[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

ucharledi;

//指示显示顺序

TMOD=0x01;

//定义T0定时方式1

TH0=0x3c;

TL0=0xb0;

//溢出20次=1秒(12M晶振)

TR0=1;

EA=ET0=1;

while

(1){

if(ldelay){//发现有时间溢出标记,进入处理

ldelay=0;

//清除标记

P2=ledp[ledi];

//读出一个值送到P2口

ledi++;

//指向下一个

if(ledi==8)ledi=0;

//到了最后一个灯就换到第一个

}}}

timer0()interrupt1{//T0中断函数

if(++t==20){t=0;

ldelay=1;

}//刷新长定时溢出标记

//重置T0初值

}

第五章

charled_mod[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,//led字模

0x7f,0x6f,0x77,0x7c,0x58,0x5e,0x79,0x71};

charkey_buf[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,//键值

0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};

voidgetKey()interrupt0{//中断函数

charkey_scan[]={0xef,0xdf,0xbf,0x7f};

//键扫描码

chari=0,j=0;

for(i=0;

i<

4;

i++){

P2=key_scan[i];

//输出扫描码

for(j=0;

j<

16;

j++){

if(key_buf[j]==P2){//读键值,并判断键号

P0=led_mod[j];

//显示闭合键键号

break;

}

P2=0x0f;

//为下次中断做准备

voidmain(void){

P0=0x00;

//开机黑屏

IT0=1;

//脉冲触发

EX0=1;

//INT0允许

//总中断允许

P2=0x0f;

//为首次中断做准备,列线全为0,行线全为1

//模拟其他程序功能

#include"

reg51.h"

charled[]={0xfe,0xfd,0xfb,0xf7};

//LED花样数据

bitdir=0,run=0;

//全局变量

voiddelay(unsignedinttime);

key()interrupt0{//键控中断函数

switch(P0&

0x0f){//修改标志位状态

case0x0e:

run=1;

break;

case0x0d:

run=0,dir=0;

case0x0b:

dir=1;

case0x07:

dir=0;

}}

voidmain(){

chari;

EX0=1;

EA=1;

//边沿触发、INT0允许、总中断允许

while

(1){

if(run)

if(dir)//若run=dir=1,自上而下流动

for(i=0;

i<

=3;

i++){

P2=led[i];

delay(200);

}

else//若run=1,dir=0,自下而上流动

for(i=3;

i>

=0;

i--){

elseP2=0xff;

//若run=0,灯全灭

}}

0x7f,0x6f};

//显示字模

sbitD1=P3^0;

voiddelay(unsignedinttime){//延时

unsignedcharj=255;

for(;

j>

j--);

key0()interrupt0{//K0中断函数

unsignedchari;

D1=IE0;

//IE0状态输出

for(i=0;

=9;

i++){//字符0-9循环1圈

P2=led_mod[i];

delay(35000);

}P2=0x40;

//结束符“-”

key1()interrupt2{//K1中断函数

D1=IE0;

//IE0状态输出

P1=led_mod[i];

}P1=0x40;

voidmain(){

TCON=0x05;

//脉冲触发方式

PX0=0;

PX1=1;

//INT1优先

D1=0;

P1=P2=0x40;

//输出初值

IE=0x85;

//开中断

i++){//字符0-9无限循环

P0=led_mod[i];

第四章

//实例1独立按键识别

REG51.H>

charkey=0;

key=P0&

0x0f;

//读取按键状态

if(key!

=0x0f)P2=key;

//显示到led

#include"

unsignedcharled[]={0xfe,0xfd,0xfb,0xf7};

//LED灯的花样数据

voiddelay(unsignedchartime){//延时函数

unsignedintj=15000;

bitdir=0,run=0;

//标志位定义及初始化

switch(P0&

0x0f){//读取键值

case0x0e:

//K1动作,设run=1

case0x0d:

//K2动作,设run=dir=0

case0x0b:

//K3动作,设dir=1

case0x07:

//K4动作,设dir=0

if(run)//若run=dir=1,自上而下流动

if(dir)

else//若run=1,dir=0,自下而上流动

//若run=0,灯全灭

reg51.H>

sbitP3_7=P3^7;

//定义计数器端口

unsignedcharcount=0;

//定义计数器

unsignedcharcodetable[]=

{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

voiddelay(unsignedinttime){

for(;

time--)

for(j=0;

P0=P2=table[0];

//显示初值00

while

(1){

if(P3_7==0){//检测按键是否压下

delay(10);

if(P3_7==0){

count++;

//计数器增1

if(count==100)count=0;

P0=table[count/10];

//十位输出显示

P2=table[count%10];

//个位输出显示

while(P3_7==0);

//等待按键抬起,防止连续计数

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

当前位置:首页 > IT计算机 > 互联网

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1