单片机及其应用报告.docx
- 文档编号:7874660
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:18
- 大小:350.09KB
单片机及其应用报告.docx
《单片机及其应用报告.docx》由会员分享,可在线阅读,更多相关《单片机及其应用报告.docx(18页珍藏版)》请在冰豆网上搜索。
单片机及其应用报告
单片机原理及应用
大作业
姓名:
XXX
专业:
通信工程
学号:
XXX
作业1流水灯实现循环左移右移
一、实验目的
1) 了解单片机系统实现LED动态显示的原理及方法;
2) 较为详细了解AT89C51芯片的性能;
3) 能够了解到单片机系统的基本原理,了解单片机控制原理;
4) 掌握AT89C51程序控制方法;
5) 掌握AT89C51 C语言中的设计和学会分析程序,进而能够根据自己的需要编写代码;
6)掌握使用PROTEUS软件进行仿真的方法;
7)掌握循环左移右移的方法。
二、实验软件
PROTEUS仿真软件
三、芯片介绍
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,俗称单片机。
AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。
四、实验内容
点亮一个流水灯,然后熄灭,接着点亮第二个流水灯,熄灭,点亮第三个,到最后点亮第八个;点亮第七个灯,一次到第一个灯,然后循环实现流水。
五、原理图
六、仿真效果图
七、软件编程程序
八、总结
作业2数码管矩阵键盘显示
一、实验目的
1) 了解单片机系统实现LED动态显示的原理及方法;
2) 较为详细了解AT89C51芯片的性能;
3) 能够了解到单片机系统的基本原理,了解单片机控制原理;
4) 掌握AT89C51程序控制方法;
5) 掌握AT89C51 C语言中的设计和学会分析程序,进而能够根据自己的需要编写代码;
6) 掌握4X4矩阵式键盘程序识别原理;
7) 掌握4X4矩阵式键盘的设计方法;
8) 学习键盘的扫描方式和应用程序设计;
9)掌握使用PROTEUS软件进行仿真的方法;
二、实验软件
PROTEUS仿真软件
三、芯片介绍
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,俗称单片机。
AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。
四、实验内容
1)4×4矩阵键盘程序识别原理。
2)每个按键都有它的行值和列值,行值和列值的组合就是识别这个按键的编码。
矩阵的行线和列线都连接到AT89C51中,通过按键0~F,来在数码管显示不同的值。
五、原理图
六、仿真效果
七、实验程序
#include
#include
#include
#define uchar unsigned char
#define uint unsigned int
#define PA8255 XBYTE[0x4000]// 8255的A口地址
#define PB8255 XBYTE[0x4001]// 8255的B口地址
#define PC8255 XBYTE[0x4002]// 8255的C口地址
#define PD8255 XBYTE[0x4003]// 8255的控制口地址
unsigned char dispBuffer[6]={17,17,17,17,17,1};// 显示缓冲
uchar LED_DATA[]=//数码管段码
{
0xc0,// 0
0xf9, // 1
0xa4, // 2
0xb0, // 3
0x99, // 4
0x92, // 5
0x82, // 6
0xf8, // 7
0x80, // 8
0x90, // 9
0x88, // a
0x83, // b
0xc6, // c
0xa1, // d
0x86, // e
0x8e, // f
0xbf, // .
0xff// 灭
};
uchar LED_NUM[]=//数码管 位码
{
0xFE,// LED1
0xFD,// LED2
0xFB,// LED3
0xF7,// LED4
0xEF,// LED5
0xDF // LED6
};
uchar KEY_number[]=// 按键扫描编码
{
0x77,// 0,
0xb7,// 1
0xd7,// 2
0xe7,// 3
0x7b,// 4
0xbb,// 5
0xdb,// 6
0xeb,// 7
0x7d,// 8
0xbd,// 9
0xdd,// a
0xed,// b
0x7e,// c
0xbe,// d
0xde,// e
0xee// f
};
void delayms(uint xms) //误差 0us
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void ini_8255()// 初始化8255
{
PD8255 = 0x81;
}
void dispRefresh(void)
{
unsigned char i;
for(i=0;i<6;i++)
{
PA8255 = LED_NUM[i];
PB8255 = LED_DATA[dispBuffer[i]];
delayms
(2);
}
}
unsigned char keyscan(void)
{
unsigned char key1,key2 = 20;
PC8255 = 0xEF;// C口的 1110 1111 , TL1列扫描
key1 = (PC8255 & 0x0F);// 读取低四位值
if (key1!
=0x0F)
{
delayms(10);// 延迟10ms
key1 = (PC8255 & 0x0F);// 读取低四位值
if (key1!
=0x0F)// 说明有按键按下
{
switch( key1 | 0xE0)// 拼凑成完整的按键码 ,第一列
{
case 0xe7:
key2 = 3;break;// 3
case 0xeb:
key2 = 7;break;// 7
case 0xed:
key2 = 11;break;// b
case 0xee:
key2 = 15;break;// f
default:
break;
}}}
PC8255 = 0xDF;// C口的 1101 1111 , TL2列扫描
key1 = (PC8255 & 0x0F);// 读取低四位值
if (key1!
=0x0F)
{ delayms(10);// 延迟10ms
key1 = (PC8255 & 0x0F);// 读取低四位值
if (key1!
=0x0F)// 说明有按键按下
{ switch( key1 | 0xD0)// 拼凑成完整的按键码 ,第一列
{ case 0xd7:
key2 = 2;break;//2
case 0xdb:
key2 = 6;break;//6
case 0xdd:
key2 = 10;break;//a
case 0xde:
key2 = 14;break;//e
default:
break;
}}}
PC8255 = 0xbF;// C口的 1110 1111 , TL1列扫描
key1 = (PC8255 & 0x0F);// 读取低四位值
if (key1!
=0x0F)
{
delayms(10);// 延迟10ms
key1 = (PC8255 & 0x0F);// 读取低四位值
if (key1!
=0x0F)// 说明有按键按下
{
switch( key1 | 0xb0)// 拼凑成完整的按键码 ,第一列
{
case 0xb7:
key2 = 1;break;//1
case 0xbb:
key2 = 5;break;//5
case 0xbd:
key2 = 9;break;//9
case 0xbe:
key2 = 13;break;//d
default:
break;
}}}
////////////////////////////////////////////////////////////////////////////////
PC8255 = 0x7F;// C口的 1110 1111 , TL1列扫描
key1 = (PC8255 & 0x0F);// 读取低四位值
if (key1!
=0x0F)
{
delayms(10);// 延迟10ms
key1 = (PC8255 & 0x0F);// 读取低四位值
if (key1!
=0x0F)// 说明有按键按下
{ switch( key1 | 0x70)// 拼凑成完整的按键码 ,第一列
{
case 0x77:
key2 = 0;break;//0
case 0x7b:
key2 = 4;break;//4
case 0x7d:
key2 = 8;break;//8
case 0x7e:
key2 = 12;break;//c
default:
break;
}}}
do
{
PC8255 = 0x0F;
key1 = (PC8255 & 0x0F);
}while(key1!
=0x0F);
return key2;
}
void dataTransform(unsigned char *pData, unsigned char keyValue)
{
unsigned char ii;
for(ii=0;ii<5;ii++)
{
pData[ii]=pData[ii+1];}
pData[5] = keyValue;}
///////////////////////////////// 以下为主程序
void main()
{ uchar key=20;
ini_8255();
dispRefresh();
while
(1)
{
key = keyscan();
if(key!
=20)
{
dataTransform(dispBuffer,key);
}
dispRefresh();
}
}
八、小结
作业3A/D转换
一、实验目的
1) 了解单片机系统实现LED动态显示的原理及方法;
2) 较为详细了解AT89C51芯片的性能;
3) 能够了解到单片机系统的基本原理,了解单片机控制原理;
4) 掌握AT89C51程序控制方法;
5) 掌握AT89C51 C语言中的设计和学会分析程序,进而能够根据自己的需要编写代码;
6)掌握使用PROTEUS软件进行仿真的方法;
7)掌握A/D转换的原理。
二、实验软件
PROTEUS仿真软件
三、芯片介绍
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,俗称单片机。
AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。
四、实验内容
设计一个程序,将IN4输入的0~+5V模拟电压转换成数字量,再将这个2位十六进制转换成3位十进制数,放在LED显示器的第四~六位显示。
五、原理图
六、仿真效果图
七、软件编程程序
#include
#include
#include
#define uchar unsigned char
#define uint unsigned int
#define PA8255 XBYTE[0x4000]// 8255的A口地址
#define PB8255 XBYTE[0x4001]// 8255的B口地址
#define PC8255 XBYTE[0x4002]// 8255的C口地址
#define PD8255 XBYTE[0x4003]// 8255的控制口地址
#define IN4_ADC0808 XBYTE[0x8004]// DAC0808对应的IN4输入端地址
sbit wr_ADC0808 = P3^6 ;
sbit rd_ADC0808 = P3^7 ;
sbit EOC = P1^0 ;
uchar LED_DATA[]=//数码管段码
{
0xc0,// 0
0xf9, // 1
0xa4, // 2
0xb0, // 3
0x99, // 4
0x92, // 5
0x82, // 6
0xf8, // 7
0x80, // 8
0x90, // 9
0x88, // a
0x83, // b
0xc6, // c
0xa1, // d
0x86, // e
0x8e, // f
0xbf, // .
0xff// 灭
};
uchar LED_NUM[]=//数码管 位码
{
0xFE,// LED1
0xFD,// LED2
0xFB,// LED3
0xF7,// LED4
0xEF,// LED5
0xDF // LED6
};
uchar KEY_number[]=// 按键扫描编码
{
0x77,// 0,
0xb7,// 1
0xd7,// 2
0xe7,// 3
0x7b,// 4
0xbb,// 5
0xdb,// 6
0xeb,// 7
0x7d,// 8
0xbd,// 9
0xdd,// a
0xed,// b
0x7e,// c
0xbe,// d
0xde,// e
0xee// f
};
void delayms(uint xms) //误差 0us
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void ini_8255()// 初始化8255,PA,PB输出,PC高四位输出,低四位输入 ,在本程序中主要是为了显示
{
PD8255 = 0x81;
}
void display(uchar display_num, uchar display_data)
{
if ((display_num >= 0x01 )&&(display_num<=0x06))// 正常显示范围内
{
uchar i = 1;
PA8255 = LED_NUM[display_num - i];// 输入1,先显示LED1
PB8255 = LED_DATA[display_data];
delayms(5);
}
}
///////////////////////////////// 以下为主程序 //////////////////////////////////////
void main()
{
uchar key1,key2,key3,key4;
key2 = 0;// 初始显示值
ini_8255();// 初始化8255
while
(1)
{
IN4_ADC0808 = 0;// 选中通到4
while(EOC!
=0);// 转换完成 EOC = 0;
key4 = IN4_ADC0808; // 读入数据
key3 = ( key4 / 100); // 百位
key2 = (key4/10)%10 ; // 十位
key1 = (key4%10) ; // 个位
display(1, key3);
display(2, key2);
display(3, key1);
}
}
八、总结
作业4D/A转换
一、实验目的
1) 了解单片机系统实现LED动态显示的原理及方法;
2) 较为详细了解AT89C51芯片的性能;
3) 能够了解到单片机系统的基本原理,了解单片机控制原理;
4) 掌握AT89C51程序控制方法;
5) 掌握AT89C51 C语言中的设计和学会分析程序,进而能够根据自己的需要编写代码;
6)掌握使用PROTEUS软件进行仿真的方法;
7)掌握D/A转换的原理。
二、实验软件
PROTEUS仿真软件
三、芯片介绍
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,俗称单片机。
AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。
四、实验内容
设计一个程序,在主程序中向P1.0输出频率为1Hz的方波,同时使用定时器1定时中断,在中断服务程序中用D/A转换器输出周期为20秒的三角波。
五、原理图
六、仿真效果图
七、软件编程程序
#include
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
#definePA8255XBYTE[0x4000]//8255的A口地址
#definePB8255XBYTE[0x4001]//8255的B口地址
#definePC8255XBYTE[0x4002]//8255的C口地址
#definePD8255XBYTE[0x4003]//8255的控制口地址
#defineIN4_ADC0808XBYTE[0x8004]//DAC0808对应的IN4输入端地址
sbitwr_ADC0808=P3^6;
sbitrd_ADC0808=P3^7;
sbitEOC=P1^0;
ucharLED_DATA[]=//数码管段码
{
0xc0,//0
0xf9,//1
0xa4,//2
0xb0,//3
0x99,//4
0x92,//5
0x82,//6
0xf8,//7
0x80,//8
0x90,//9
0x88,//a
0x83,//b
0xc6,//c
0xa1,//d
0x86,//e
0x8e,//f
0xbf,//.
0xff//灭
};
ucharLED_NUM[]=//数码管位码
{
0xFE,//LED1
0xFD,//LED2
0xFB,//LED3
0xF7,//LED4
0xEF,//LED5
0xDF//LED6
};
ucharKEY_number[]=//按键扫描编码
{
0x77,//0,
0xb7,//1
0xd7,//2
0xe7,//3
0x7b,//4
0xbb,//5
0xdb,//6
0xeb,//7
0x7d,//8
0xbd,//9
0xdd,//a
0xed,//b
0x7e,//c
0xbe,//d
0xde,//e
0xee//f
};
voiddelayms(uintxms)//误差0us
{
uinti,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
voidini_8255()//初始化8255,PA,PB输出,PC高四位输出,低四位输入,在本程序中主要是为了显示
{
PD8255=0x81;
}
voiddisplay(uchardisplay_num,uchardisplay_data)
{
if((display_num>=0x01)&&(display_num<=0x06))//正常显示范围内
{
uchari=1;
PA8255=LED_NUM[display_num-i];//输入1,先显示LED1
PB8255=LED_DATA[display_data];
delayms(5);
}
}
/////////////////////////////////以下为主程序//////////////////////////////////////
voidmain()
{
ucharkey1,key2,key3,key4;
key2=0;//初始显示值
ini_8255();//初始化8255
while
(1)
{
IN4_ADC0808=0;//选中通到4
while(EOC!
=0);//转换完成EOC=0;
key4=IN4_ADC0808;//读入数据
key3=(key4/100);//百位
key2=(key4/10)%10;//十位
key1=(key4%10);//个位
display(1,key3);
display(2,key2);
display(3,key1);
}
八、总结
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 及其 应用 报告