单片机
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#define uchar unsigned char
uchar code table[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0xee,0x3e,0x9c,0x7a,0x9e,0x8e};
//共阴数码管编码表
uchar code address[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
sbit led3=P1^3;
sbit key0=P1^4;
sbit key1=P1^5;
sbit key2=P1^6;
sbit key3=P1^7;
void delay(uint k)//延时子程序
{
uint i,j;
for(i=7;i<k;i++)
for(j=0;j<124;j++);
}
void main()
//数码管选择编码表
void delay(uint);//什么延时子程序
void main()
{
uchar m=0;
while(1)
{
if(m==8) m=0;//当m循环到8,则跳回0.
P2=address[m];//P2口输出数码管选中信号,选中对应的数码管
P1=table[m++];//P1口输出要输出是数字
{
while(1)
{
p1_0 =0;
delay( ); //延时一段时间
p1_0 =1;
delay( );
}
}
实验六:数码管动态显示
一、实验目的:
了解数码管动态显示的原理;
学会设计数码管动态显示;
用软件验证设计是否正确。
二、实验结果图:
三、实验程序:
#include<reg51.h>
#define uint unsigned int
delay(500); //延时显示
}
}
void delay(uint m)//延时子程序,约500个机器周期
{
while(m--);
实验七:数字电压表实例:
一、实验目的:
学会设计数字电压表实验;
用软件来验证数字电压表设计是否正确。
二、实验结果图:
三、实验程序:
#include<reg51.h>
#define uint unsigned int
{delays();//消振
if(P3!=0xf0)//如果if的值为真,这时可以确定有键盘按下
{
temp=P3;//存储列读入的值
P3=0x0f;//置列为0,行为1,读行值。
key=temp|P3;//将行,列值综合,赋给key。
for(i=0;i<16;i++)
if(key==KEY_TABLE[i])//读键盘表,确定读入的按键值
uchar code table[]={0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0xee,0x3e,0x9c,0x7a,0x9e,0x8e};
uchar num=0;
sbit led0=P1^0;
sbit led1=P1^1;
sbit led2=P1^2;
{
PORT_DATA=*(pt+0x7dff);
*(pt+0x7cff)=PORT_DATA;
}
}
实验三独立键盘应用实例
一、实验目的:
根据原理图在软件中进行实验;
学会设计独立键盘。
二、实验结果图:
三、实验程序:
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit OE=P3^2;
sbit dot=P1^0;
void delay(uint m)
{
while(m--);
}
void main()
{
uint temp;
START=0;
OE=0;
START=1;
START=0;
while(1)
{
if(EOC==1)
{
OE=1;
temp=P0;
temp=temp*1.0/255*500;
{
while(1)
{
led0=key0;led1=key1;led2=key2;led3=key3;
}
}
实验四流水灯实例应用
一、实验目的:
了解流水灯的设计原理;
学习用软件仿真结果。
二、实验结果图:
三、实验程序:
#include<reg51.h>
#define uint unsigned int
void delay(uint k)
sbit p1_0=P1^0;
void delay(void )
{
unsigned char i;
for(i=200;i>0;i--);
}
/*********************************主程序***********************************/
void main( )
}
}
实验五:数码管静态显示
一、实验目的:
了解数码管静态显示的原理;
学习用软件设计并仿真数码管静态显示实验。
二、实验结果图:
三、实验程序:
#include<reg51.h>
/******************************延时子程序**********************************/
OE=0;
P2=0xfe;
P1=table[temp%10];
delay(500);
P2=0xfd;
P1=table[temp/10%10];
delay(500);
P2=0xfb;
P1=table[temp/100%10];
dot=1;
delay(500);
START=1;
START=0;
}
}
#define uchar unsigned char
uchar code table[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0xee,0x3e,0x9c,0x7a,0x9e,0x8e};
sbit START=P3^0;
sbit EOC=P3^1;
{num=i;break;}
P2=TABLE[num];//点亮数码管,显示按键值。
delayl();
}
}
}
}
实验二8255A简单应用实验
一、实验目的:
学会用8255A做一些简单的实验;
熟练掌握软件的使用方法。
二、实验结果图:
三、实验程序:
#include<reg51.h>
#include<absacc.h>
0xe7,0xd7,0xb7,0x77};//键盘表
uchar code TABLE[]={0x3F,0x06,0x5B,0x4F,
0x66,0x6D,0x7D,0x07,
0x7F,0x6F,0x77,0x7c,
0x39,0x5e,0x79,0x71};//共阴极数码管编码表
void delayl()//长延时,作点亮数码管用
单片机实验
学号:0905074134姓名:贾亚云
学号:0905074156姓名:刘昊江
学号:0905074141姓名:徐海湾
学号:0905074119姓名:赵皓
实验一:4×4矩阵键盘应用实例
一、实验目的:
学会用单片机做4×4矩阵键盘实验;
学习软件的使用方法及了解其步骤。
二、实验结果图:
三、实验程序:
#define add XBYTE[0x0000]
//7CFFH;A口
//7DFFH;B口
//7FFFH;控制字地址
main()
{
unsigned char PORT_DATA;
unsigned char xdata *pt;
pt=&add;
*(pt+0x7fff)=0x82;//写控制字
while(1)
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar code KEY_TABLE[]={ 0xee,0xde,0xbe,0x7e,
0xed,0xdd,0xbd,0x7d,
0xeb,0xdb,0xbb,0x7b,
{
uint i,j;
for(i=7;i<k;i++)
for(j=0;j<124;j++);
}
main()
{
while(1)//死循环
{
P2=0xfe;delay(500);//点亮第一个发光二极管
P2=0xfd;delay(500);//点亮第二个发光二极管
P2=0xfb;delay(500);//点亮第三个发光二极管
{uint n=50000;while(n--);}
void delays()//Baidu Nhomakorabea延时,作消振用
{uint n=10000;while(n--);}
main()
{
uchar temp,key,num,i;
P2=0;
while(1)
{
P3=0xf0;//置行为0,列为1,读列值。
if(P3!=0xf0)//判断有,无键盘按下
P2=0xf7;delay(500);//点亮第四个发光二极管
P2=0xef;delay(500);//点亮第五个发光二极管
P2=0xdf;delay(500);//点亮第六个发光二极管
P2=0xbf;delay(500);//点亮第七个发光二极管
P2=0x7f;delay(500);//点亮第八个发光二极管
uchar code table[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0xee,0x3e,0x9c,0x7a,0x9e,0x8e};
//共阴数码管编码表
uchar code address[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
sbit led3=P1^3;
sbit key0=P1^4;
sbit key1=P1^5;
sbit key2=P1^6;
sbit key3=P1^7;
void delay(uint k)//延时子程序
{
uint i,j;
for(i=7;i<k;i++)
for(j=0;j<124;j++);
}
void main()
//数码管选择编码表
void delay(uint);//什么延时子程序
void main()
{
uchar m=0;
while(1)
{
if(m==8) m=0;//当m循环到8,则跳回0.
P2=address[m];//P2口输出数码管选中信号,选中对应的数码管
P1=table[m++];//P1口输出要输出是数字
{
while(1)
{
p1_0 =0;
delay( ); //延时一段时间
p1_0 =1;
delay( );
}
}
实验六:数码管动态显示
一、实验目的:
了解数码管动态显示的原理;
学会设计数码管动态显示;
用软件验证设计是否正确。
二、实验结果图:
三、实验程序:
#include<reg51.h>
#define uint unsigned int
delay(500); //延时显示
}
}
void delay(uint m)//延时子程序,约500个机器周期
{
while(m--);
实验七:数字电压表实例:
一、实验目的:
学会设计数字电压表实验;
用软件来验证数字电压表设计是否正确。
二、实验结果图:
三、实验程序:
#include<reg51.h>
#define uint unsigned int
{delays();//消振
if(P3!=0xf0)//如果if的值为真,这时可以确定有键盘按下
{
temp=P3;//存储列读入的值
P3=0x0f;//置列为0,行为1,读行值。
key=temp|P3;//将行,列值综合,赋给key。
for(i=0;i<16;i++)
if(key==KEY_TABLE[i])//读键盘表,确定读入的按键值
uchar code table[]={0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0xee,0x3e,0x9c,0x7a,0x9e,0x8e};
uchar num=0;
sbit led0=P1^0;
sbit led1=P1^1;
sbit led2=P1^2;
{
PORT_DATA=*(pt+0x7dff);
*(pt+0x7cff)=PORT_DATA;
}
}
实验三独立键盘应用实例
一、实验目的:
根据原理图在软件中进行实验;
学会设计独立键盘。
二、实验结果图:
三、实验程序:
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit OE=P3^2;
sbit dot=P1^0;
void delay(uint m)
{
while(m--);
}
void main()
{
uint temp;
START=0;
OE=0;
START=1;
START=0;
while(1)
{
if(EOC==1)
{
OE=1;
temp=P0;
temp=temp*1.0/255*500;
{
while(1)
{
led0=key0;led1=key1;led2=key2;led3=key3;
}
}
实验四流水灯实例应用
一、实验目的:
了解流水灯的设计原理;
学习用软件仿真结果。
二、实验结果图:
三、实验程序:
#include<reg51.h>
#define uint unsigned int
void delay(uint k)
sbit p1_0=P1^0;
void delay(void )
{
unsigned char i;
for(i=200;i>0;i--);
}
/*********************************主程序***********************************/
void main( )
}
}
实验五:数码管静态显示
一、实验目的:
了解数码管静态显示的原理;
学习用软件设计并仿真数码管静态显示实验。
二、实验结果图:
三、实验程序:
#include<reg51.h>
/******************************延时子程序**********************************/
OE=0;
P2=0xfe;
P1=table[temp%10];
delay(500);
P2=0xfd;
P1=table[temp/10%10];
delay(500);
P2=0xfb;
P1=table[temp/100%10];
dot=1;
delay(500);
START=1;
START=0;
}
}
#define uchar unsigned char
uchar code table[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0xee,0x3e,0x9c,0x7a,0x9e,0x8e};
sbit START=P3^0;
sbit EOC=P3^1;
{num=i;break;}
P2=TABLE[num];//点亮数码管,显示按键值。
delayl();
}
}
}
}
实验二8255A简单应用实验
一、实验目的:
学会用8255A做一些简单的实验;
熟练掌握软件的使用方法。
二、实验结果图:
三、实验程序:
#include<reg51.h>
#include<absacc.h>
0xe7,0xd7,0xb7,0x77};//键盘表
uchar code TABLE[]={0x3F,0x06,0x5B,0x4F,
0x66,0x6D,0x7D,0x07,
0x7F,0x6F,0x77,0x7c,
0x39,0x5e,0x79,0x71};//共阴极数码管编码表
void delayl()//长延时,作点亮数码管用
单片机实验
学号:0905074134姓名:贾亚云
学号:0905074156姓名:刘昊江
学号:0905074141姓名:徐海湾
学号:0905074119姓名:赵皓
实验一:4×4矩阵键盘应用实例
一、实验目的:
学会用单片机做4×4矩阵键盘实验;
学习软件的使用方法及了解其步骤。
二、实验结果图:
三、实验程序:
#define add XBYTE[0x0000]
//7CFFH;A口
//7DFFH;B口
//7FFFH;控制字地址
main()
{
unsigned char PORT_DATA;
unsigned char xdata *pt;
pt=&add;
*(pt+0x7fff)=0x82;//写控制字
while(1)
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar code KEY_TABLE[]={ 0xee,0xde,0xbe,0x7e,
0xed,0xdd,0xbd,0x7d,
0xeb,0xdb,0xbb,0x7b,
{
uint i,j;
for(i=7;i<k;i++)
for(j=0;j<124;j++);
}
main()
{
while(1)//死循环
{
P2=0xfe;delay(500);//点亮第一个发光二极管
P2=0xfd;delay(500);//点亮第二个发光二极管
P2=0xfb;delay(500);//点亮第三个发光二极管
{uint n=50000;while(n--);}
void delays()//Baidu Nhomakorabea延时,作消振用
{uint n=10000;while(n--);}
main()
{
uchar temp,key,num,i;
P2=0;
while(1)
{
P3=0xf0;//置行为0,列为1,读列值。
if(P3!=0xf0)//判断有,无键盘按下
P2=0xf7;delay(500);//点亮第四个发光二极管
P2=0xef;delay(500);//点亮第五个发光二极管
P2=0xdf;delay(500);//点亮第六个发光二极管
P2=0xbf;delay(500);//点亮第七个发光二极管
P2=0x7f;delay(500);//点亮第八个发光二极管