单片机实验程序全.docx

上传人:b****6 文档编号:4269094 上传时间:2022-11-28 格式:DOCX 页数:18 大小:18.91KB
下载 相关 举报
单片机实验程序全.docx_第1页
第1页 / 共18页
单片机实验程序全.docx_第2页
第2页 / 共18页
单片机实验程序全.docx_第3页
第3页 / 共18页
单片机实验程序全.docx_第4页
第4页 / 共18页
单片机实验程序全.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

单片机实验程序全.docx

《单片机实验程序全.docx》由会员分享,可在线阅读,更多相关《单片机实验程序全.docx(18页珍藏版)》请在冰豆网上搜索。

单片机实验程序全.docx

单片机实验程序全

2基本输入输出实验(蜂鸣器控制程序)

/*******************************************************

名称:

基本输入输出(I/O)程序

说明:

********************************************************/

#include//包含头文件

#defineuintunsignedint//宏定义

#defineucharunsignedchar

sbitbuzzer=P3^5;

sbitKeyadd=P2^0;

sbitKeydec=P2^1;

sbitKeycom=P2^2;

voidDelay(uintz)

{uintx;

uchary;

for(x=z;x>0;x--)//延时

{

for(y=250;y>0;y--);

}

}

voidmain(void)

{ucharvoice;

voice=3;

while

(1)

{

if(Keyadd==0)//按键被按下时为0

voice=1;

if(Keydec==0)

voice=2;

if(Keycom==0)

voice=3;

if(voice==1)

{buzzer=~buzzer;

Delay

(1);

}

elseif(voice==2)

{buzzer=~buzzer;

Delay(20);

}

else

buzzer=1;

}

}

3定时器中断实验

/*******************************************************

名称:

实验三作业

说明:

********************************************************/

#include//包含头文件

#defineuintunsignedint//宏定义

#defineucharunsignedchar

ucharcounter;

ucharvoice;

sbitbuzzer=P3^5;

sbitKeyadd=P2^0;

sbitKeydec=P2^1;

sbitKeycom=P2^2;

sbitKeycan=P2^3;

//----------------计算计数器初值-----------------//

#defineT0_TIME1254//定时时间us为单位

#defineT0ReLoadL1((65536-(uint)(T0_TIME1*11.0592/12))%256)

#defineT0ReLoadH1((65536-(uint)(T0_TIME1*11.0592/12))/256)

//----------------计算计数器初值-----------------//

#defineT0_TIME21400//定时时间us为单位

#defineT0ReLoadL2((65536-(uint)(T0_TIME2*11.0592/12))%256)

#defineT0ReLoadH2((65536-(uint)(T0_TIME2*11.0592/12))/256)

/*********************************************************

名称:

主程序

说明:

**********************************************************/

voidmain(void)

{

//-----------------------------初始化TIMER0

TMOD|=0x01;//定时器T0方式1

TH0=T0ReLoadH1;//装载计数器初值

TL0=T0ReLoadL1;

TR0=1;//启动Timer0

ET0=1;//Timer0中断使能

EA=1;//总开关使能

//-----------------------------大循环

counter=0;

while

(1)

{

if(Keyadd==0)//按键被按下时为0

voice=1;

if(Keydec==0)

voice=2;

if(Keycom==0)

voice=3;

}

}

/*********************************************************

名称:

Timer0中断服务子程序

功能:

产生10ms定时中断

**********************************************************/

voidTimer0_Int(void)interrupt1

{if(voice==1)

{TH0=T0ReLoadH1;//重装载计数器初值

TL0=T0ReLoadL1;

buzzer=~buzzer;

}

if(voice==2)

{TH0=T0ReLoadH2;

TL0=T0ReLoadL2;

buzzer=~buzzer;

}

if(voice==3)

{

}

}

4LED数码管动态扫描显示实验

#include

#defineuintunsignedint

#defineucharunsignedchar

//------------LED显示代码-----------//

//bit7bit6bit5bit4bit3bit2bit1bit0

//dpGCDEFBA

ucharcodeseg[10]={0x3f,0x22,0x5b,0x73,0x66,//0,1,2,3,4

0x75,0x7d,0x23,0x7f,0x77,};//5,6,7,8,9

ucharidatadis_buff_1[4];//第一行LED显示缓冲

ucharidatadis_buff_2[4];//第二行LED显示缓冲

ucharcounter;

sbitU4_HC574_CP=P1^0;//S3显示锁存74HC574脉冲

sbitU5_HC574_CP=P1^1;//S4显示锁存74HC574脉冲

#defineT0_TIME10000//定时时间us为单位

#defineT0ReLoadL((65536-(uint)(T0_TIME*11.0592/12))%256)

#defineT0ReLoadH((65536-(uint)(T0_TIME*11.0592/12))/256)

/*********************************************************

名称:

数码管显示驱动子程序

说明:

**********************************************************/

voidDisplay(void)

{uchardatai,j,k,temp00;

temp00=0x20;

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

{

P1|=0x3C;//关所有扫描位

P0=dis_buff_1[i];

U4_HC574_CP=0;

U4_HC574_CP=1;//S3显示锁存74HC574脉冲上升沿

P0=dis_buff_2[i];

U5_HC574_CP=0;

U5_HC574_CP=1;//S4显示锁存74HC574脉冲上升沿

P1&=(~temp00);//送扫描位

for(j=0;j<20;j++)//延时

{for(k=0;k<20;k++);

}

temp00>>=1;//扫描位移位

}

P1|=0x3C;//关所有扫描位

}

/*********************************************************

名称:

主程序

**********************************************************/

voidmain(void)

{

uchardatabai,shi,ge;

uintdataNum;

uchardatatemp00;

TMOD|=0x01;//定时器T0方式1

TH0=T0ReLoadH;//装载计数器初值

TL0=T0ReLoadL;

TR0=1;//启动Timer0

ET0=1;//Timer0中断使能

EA=1;//总开关使能

counter=0;

Num=999;

for(;;)

{bai=Num/100;

temp00=Num-bai*100;

shi=temp00/10;

ge=temp00-shi*10;

dis_buff_1[0]=0;

dis_buff_1[1]=0;

dis_buff_1[2]=0;

dis_buff_1[3]=0;

dis_buff_2[0]=0;

dis_buff_2[1]=seg[bai];

dis_buff_2[2]=seg[shi];

dis_buff_2[3]=seg[ge];

if(counter==100)

{

counter=0;

Num--;

}

if(Num==0)

Num=999;

Display();//调用LED数码管显示子程序

}

}

voidTimer0_Int(void)interrupt1

{

TH0=T0ReLoadH;//重装载计数器初值

TL0=T0ReLoadL;

counter++;

}

5实时时钟与温度传感器实验(只需main()部分代码)

voidmain(void)

{

ucharHour,Min,Sec;

//-----------------------------初始化TIMER0

TMOD|=0x01;//定时器T0方式1

TH0=T0ReLoadH;//装载计数器初值

TL0=T0ReLoadL;

TR0=1;//启动Timer0

ET0=1;//Timer0中断使能

EA=1;//总开关使能

counter=0;

//-----------------------------大循环

WR_DS1302(0x8e,0X00);

WR_DS1302(0x84,0X14);

WR_DS1302(0x82,0X43);

WR_DS1302(0x80,0X00);

WR_DS1302(0x8e,0X80);

for(;;)

{

Hour=RD_DS1302(0x85);

Min=RD_DS1302(0x83);

Sec=RD_DS1302(0x81);

dis_buff_1[0]=seg[Hour>>4];

if(counter<=49)

dis_buff_1[1]=seg[Hour&0x0f]|0x80;

elseif(counter<=99)

dis_buff_1[1]=seg[Hour&0x0f];

elseif(counter==100)

counter=0;

dis_buff_1[2]=seg[Min>>4];

dis_buff_1[3]=seg[Min&0x0f];

dis_buff_2[0]=0;

dis_buff_2[1]=0;

dis_buff_2[2]=seg[Sec>>4];

dis_buff_2[3]=seg[Sec&0x0f];

Display();

}

}

674HC595串行输入实验

#include//use_nop_()function

#include

#defineuintunsignedint

#defineucharunsignedchar

ucharcounter;

//----------------计算计数器初值-----------------//

#defineT0_TIME10000//定时时间us为单位

#defineT0ReLoadL((65536-(uint)(T0_TIME*11.0592/12))%256)

#defineT0ReLoadH((65536-(uint)(T0_TIME*11.0592/12))/256)

ucharbdataHC595_buff[2];//交通灯控制1的位寻址变量

sbitHC595RegCLK=P2^5;//4hc595锁存时钟输出

sbitHC595S_Data=P2^6;//74hc595串行数据输出

sbitHC595ShiftCLK=P2^7;//74hc595串行移位时钟输出

/*********************************************************

名称:

WR_74HC595

说明:

向2片74HC595写入2字节数据(HC595_buff)

**********************************************************/

voidWR_74HC595(void)

{

uchari,j,k,temp00;

HC595RegCLK=0;//锁存线置“低”

HC595ShiftCLK=0;//HC595.CLK=0

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

{

k=0X80;

temp00=HC595_buff[1-i];

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

{

if(temp00&k)

HC595S_Data=1;//HC595.SDA

else

HC595S_Data=0;

HC595ShiftCLK=1;//产生上升沿,移入数据

k>>=1;//k右移一位

HC595ShiftCLK=0;//HC595.CLK

}

}

HC595RegCLK=1;//产生上升沿,锁存数据

}

voidTimer0_Int(void)interrupt1

{

TH0=T0ReLoadH;//重装载计数器初值

TL0=T0ReLoadL;

counter++;

}

/*********************************************************

名称:

主程序

说明:

main主函数放在所有子程序的后面,自称无需声明定义

**********************************************************/

voidmain(void)

{ucharCN,i;

CN=0;

HC595_buff[0]=0x00;

HC595_buff[1]=0x00;

//-----------------------------初始化TIMER0

TMOD|=0x01;//定时器T0方式1

TH0=T0ReLoadH;//装载计数器初值

TL0=T0ReLoadL;

TR0=1;//启动Timer0

ET0=1;//Timer0中断使能

EA=1;//总开关使能

counter=0;

for(;;)

{if(CN<10)

{

if(counter==50)

{counter=0;

HC595_buff[0]=~HC595_buff[0];

HC595_buff[1]=~HC595_buff[1];

CN++;

counter=0;

i=0;

}

if(CN==10)

{HC595_buff[0]=0x00;

HC595_buff[1]=0x08;}

}

elseif(CN==10)

{

if(counter==10)

{i++;

counter=0;

if(i<4)

{HC595_buff[1]>>=1;

}

elseif(i==4)

{HC595_buff[0]=0x80;

HC595_buff[1]=0x00;

}

elseif(i<12)

{HC595_buff[0]>>=1;

}

elseif(i==12)

{i=0;

HC595_buff[0]=0x00;

HC595_buff[1]=0x08;

}

}

}

WR_74HC595();

}

}

7交通信号灯控制实验(仅需TraficLighter_ctrl()子程序部分代码)

voidTraficLighter_ctrl(void)

{

switch(TraficLighter_state)

{

case0:

//初始化状态,两个方向都为红灯5秒钟

{if(timer_count1==50)

{

timer_count1=0;

HC595_buff[0]=~HC595_buff[0];

HC595_buff[1]=~HC595_buff[1];

}

if(timer_count0==0)

{

TraficLighter_state=1;

timer_count0=30;

HC595_buff[0]=0;

HC595_buff[1]=0;

}

}break;

case1:

//状态1,南北方向红灯,东西绿灯

{

East_Green=1;

West_Green=1;

North_Red=1;

South_Red=1;

if(timer_count0==0)

{

TraficLighter_state=2;

timer_count0=5;

HC595_buff[0]=0;

HC595_buff[1]=0;

}

}break;

case2:

//状态2,南北方向红,东西黄灯闪烁

{

South_Red=1;

North_Red=1;

if(timer_count1==50)

{

timer_count1=0;

East_Yellow=~East_Yellow;

West_Yellow=~West_Yellow;

}

if(timer_count0==0)

{

TraficLighter_state=3;

timer_count0=50;

HC595_buff[0]=0;

HC595_buff[1]=0;

}

}break;

case3:

//状态3,南北方向绿灯,东西红灯

{East_Red=1;

West_Red=1;

North_Green=1;

South_Green=1;

if(timer_count0==0)

{

TraficLighter_state=4;

timer_count0=5;

HC595_buff[0]=0;

HC595_buff[1]=0;

}

}break;

case4:

//状态4,东西方向红,南北黄灯闪烁

{East_Red=1;

West_Red=1;

if(timer_count1==50)

{

timer_count1=0;

South_Yellow=~South_Yellow;

North_Yellow=~North_Yellow;

}

if(timer_count0==0)

{

TraficLighter_state=1;

timer_count0=5;

HC595_buff[0]=0;

HC595_buff[1]=0;

}

}break;

}

}

8UART串口通讯实验

#include//包含头文件

#defineuintunsignedint//宏定义

#defineucharunsignedchar

ucharRec_No;

ucharRec_Data;

ucharRec_Addr;

ucharSend_ok;

ucharRec_order;

ucharSelf_Addr;

sbitrelay=P3^7;

/*********************************************************

名称:

主程序

说明:

*****

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

当前位置:首页 > 初中教育 > 理化生

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

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