单片机实验程序全.docx
- 文档编号:26069304
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:21
- 大小:18.85KB
单片机实验程序全.docx
《单片机实验程序全.docx》由会员分享,可在线阅读,更多相关《单片机实验程序全.docx(21页珍藏版)》请在冰豆网上搜索。
单片机实验程序全
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
#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;
/*********************************************************
名称:
主程序
说明:
*****
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 实验 程序