单片机期末考试编程题
更新时间:2023-05-13 14:21:01 阅读量: 实用文档 文档下载
/***************************************
实验题目要求:
P23- P26口做输出口,接发光二极管,编写并调试程序,使其闪烁。
时间:2012年12月21日
程序撰写者:邹康
*****************************************/
#include<reg52.h>
void delay(unsigned int t) //软延时大致时间为1ms
{
unsigned int a,b;
for(a=0;a<t;a++)
for(b=0;b<120;b++);
}
void main()
{
while(1)
{
P2=~P2;
delay(1000); //延时1s
}
} /*********************************************************
实验题目要求:
P23- P26口做输出口,接发光二极管,编写并调试跑马灯程序。
时间:2012年12月21日
程序撰写者:邹康
***********************************************************/
#include<reg52.h>
void delay(unsigned int t) //延时1ms左右
{
unsigned int a,b;
for(a=0;a<t;a++)
for(b=0;b<120;b++);
}
void main()
{
unsigned char i=0,m=0;
while(1)
{
for(i=0;i<4;i++) //向左移动
{
P2=~(0x08<<i);
delay(1000);
}
m=~P2;
for(i=0;i<4;i++) //向右移动
{
P2=~(m>>i);
delay(1000);
}
}
}/*********************************
实验题目要求:
设计一个二进制减1计数器,按一次键,减1,并用4个LED显示计数结果,减至0时,重新从15开始计数。
时间:2012年12月21日
程序撰写者:邹康
**********************************/
#include<reg52.h>
sbit key1=P2^0;
sbit LED0=P2^6; //单片机板子最右边的led灯
sbit LED1=P2^5; //右边数第二个灯
sbit LED2=P2^4; //右边数第三个灯
sbit LED3=P2^3; //右边数第四个灯
char number=15;
unsigned char num[4];
void key() //通过按键对NUMBER的数值进行减计数
{
static unsigned char m=0;
if(key1==0)
{
m++;
if(m>=30)
{
number--;
if(number<0)
number=15;
m=0;
}
}
}
void number_change() //将十进制转换为二进制
{
unsigned int n=0;
unsigned char j=0;
n=number;
for(j=0;j<4;j++)
{
num[j]=n%2;
n=n/2;
}
}
void show() //通过LED将二进制显示出来
{
LED0=!num[0];
LED1=!num[1];
LED2=!num[2];
LED3=!num[3];
}
void main()
{
while(1)
{
key();
number_change();
show();
}
}/*******************************************
实验题目要求:
用1个按键控制LED的显示,要求显示3种以上的不同模式。
时间:2012年12月22日
程序撰写者:邹康
********************************************/
#include<reg52.h>
sbit led0=P2^3;
sbit led1=P2^4;
sbit led2=P2^5;
sbit led3=P2^6;
sbit mode_key=P2^0;
char mode=0;
void delay(unsigned int t)
{
unsigned int a,b;
for(a=0;a<t;a++)
for(b=0;b<120;b++);
}
void key()
{
static unsigned char m;
if(mode_key==0)
{
m++;
if(m>=30)
{
mode++;
if(mode>=3)
mode=0;
m=0;
}
}
}
void mode_1()
左右
{
unsigned char i=0,c=0;
for(i=0;i<4;i++)
{
P2|=0xf8;
c=~(0x08<<i);
P2&=c;
delay(1000);
} //延时时间大约1ms //通过按键进行模式选择 //模式一 根据开发板,LED循环右移,时间间隔1s
}
void mode_2() //模式二 根据开发板,LED一闪一灭,时间间隔1s左右 {
led0=0;
led1=0;
led2=0;
led3=0;
delay(1000);
led0=1;
led1=1;
led2=1;
led3=1;
delay(1000);
}
void mode_3() //模式三 , 先循环右移,再循环左移,时间间隔1s左右 {
unsigned char i=0,n=0,c=0;
for(i=0;i<4;i++)
{
P2|=0xf8;
P2&=~(0x08<<i);
delay(1000);
}
for(i=0;i<4;i++)
{
P2|=0xf8;
P2&=~(0x40>>i);
delay(1000);
}
}
void main()
{
while(1)
{
key();
switch(mode)
{
case 0 : mode_1();break;
case 1 : mode_2();break;
case 2 : mode_3();break;
}
}/*******************************************
实验题目要求:
用1个按键控制LED的显示,要求显示3种以上的不同模式。
时间:2012年12月22日
程序撰写者:邹康
********************************************/
#include<reg52.h>
sbit led0=P2^3;
sbit led1=P2^4;
sbit led2=P2^5;
sbit led3=P2^6;
sbit mode_key=P2^0;
char mode=0;
void delay(unsigned int t)
{
unsigned int a,b;
for(a=0;a<t;a++)
for(b=0;b<120;b++);
}
void key()
{
static unsigned char m;
if(mode_key==0)
{
m++;
if(m>=30)
{
mode++;
if(mode>=3)
mode=0;
m=0;
}
}
}
void mode_1()
左右
{
unsigned char i=0,c=0;
for(i=0;i<4;i++) //延时时间大约1ms //通过按键进行模式选择 //模式一 根据开发板,LED循环右移,时间间隔1s
{
P2|=0xf8;
c=~(0x08<<i);
P2&=c;
delay(1000);
}
}
void mode_2()
{
led0=0;
led1=0;
led2=0;
led3=0;
delay(1000);
led0=1;
led1=1;
led2=1;
led3=1;
delay(1000);
}
void mode_3()
{
unsigned char i=0,n=0,c=0;
for(i=0;i<4;i++)
{
P2|=0xf8;
P2&=~(0x08<<i);
delay(1000);
}
for(i=0;i<4;i++)
{
P2|=0xf8;
P2&=~(0x40>>i);
delay(1000);
}
}
void main()
{
while(1)
{
key();
switch(mode) //模式二 //模式三 ,根据开发板,LED一闪一灭,时间间隔1s左右 先循环右移,再循环左移,时间间隔1s左右
{
case 0 : mode_1();break;
case 1 : mode_2();break;
case 2 : mode_3();break;
}
}
}
}/************************************
实验题目要求:
采用外部中断的方式实现用1个按键控制LED的显示,要求显示3种以上的不同模式。
时间:2012年12月22日
程序撰写者:邹康
*************************************/
#include<reg52.h>
sbit led0=P2^3;
sbit led1=P2^4;
sbit led2=P2^5;
sbit led3=P2^6;
unsigned char mode=0;
void delay(unsigned int t) //延时时间大约1ms
{
unsigned int a,b;
for(a=0;a<t;a++)
for(b=0;b<120;b++);
}
void mode_1() //模式一 根据开发板,LED循环右移,时间间隔1s左右
{
unsigned char i=0,c=0;
for(i=0;i<4;i++)
{
P2|=0xf8;
c=~(0x08<<i);
P2&=c;
delay(1000);
}
}
void mode_2()
{
led0=0;
led1=0;
led2=0;
led3=0;
delay(1000);
led0=1;
led1=1;
led2=1;
led3=1;
delay(1000);
}
void mode_3()
{
unsigned char i=0,n=0,c=0;
for(i=0;i<4;i++)
{
P2|=0xf8;
P2&=~(0x08<<i);
delay(1000);
}
for(i=0;i<4;i++)
{
P2|=0xf8;
P2&=~(0x40>>i);
delay(1000);
}
}
void init()
{
EA=1;
IT0=1;
EX0=1;
}
void main()
{
init();
while(1)
{ //模式二 //模式三 ,根据开发板,LED一闪一灭,时间间隔1s左右 先循环右移,再循环左移,时间间隔1s左右
switch(mode)
{
case 0:mode_1();break;
case 1:mode_2();break;
case 2:mode_3();break;
}
}
}
void come0() interrupt 0
{
mode++;
if(mode>2)
mode=0;
}/******************************************
实验题目要求:
采用外部中断的方式实现一个二进制减1计数器,按一次键,减1,
并用4个LED显示计数结果,减至0时,重新从15开始计数。
时间:2012年12月22日
程序撰写者:邹康
******************************************/
#include<reg52.h>
sbit led0=P2^6;
sbit led1=P2^5;
sbit led2=P2^4;
sbit led3=P2^3;
unsigned char num[4];
char number=15;
void init()
{
EA=1;
IT0=1;
EX0=1;
}
void num_change()
{
char i=0,n=0;
n=number;
for(i=0;i<4;i++)
{
num[i]=n%2;
n=n/2;
}
led0=!num[0];
led1=!num[1];
led2=!num[2];
led3=!num[3];
}
void main()
{
init();
while(1)
{
num_change();
}
}
void come0() interrupt 0
{
number--;
if(number<0)
number=15;
}/************************************
实验题目要求:
采用外部中断的方式实现用1个按键控制LED的显示,要求显示3种以上的不同模式。
时间:2012年12月22日
程序撰写者:邹康
*************************************/
#include<reg52.h>
sbit led0=P2^3;
sbit led1=P2^4;
sbit led2=P2^5;
sbit led3=P2^6;
unsigned char mode=0;
void delay(unsigned int t) //延时时间大约1ms
{
unsigned int a,b;
for(a=0;a<t;a++)
for(b=0;b<120;b++);
}
void mode_1() //模式一 根据开发板,LED循环右移,时间间隔1s左右
{
unsigned char i=0,c=0;
for(i=0;i<4;i++)
{
P2|=0xf8;
c=~(0x08<<i);
P2&=c;
delay(1000);
}
}
void mode_2()
{
led0=0;
led1=0;
led2=0;
led3=0;
delay(1000);
led0=1;
led1=1;
led2=1;
led3=1;
delay(1000);
}
void mode_3()
{
unsigned char i=0,n=0,c=0;
for(i=0;i<4;i++)
{
P2|=0xf8;
P2&=~(0x08<<i);
delay(1000);
}
for(i=0;i<4;i++)
{
P2|=0xf8;
P2&=~(0x40>>i); //模式二 //模式三 ,根据开发板,LED一闪一灭,时间间隔1s左右 先循环右移,再循环左移,时间间隔1s左右
delay(1000);
}
}
void init()
{
EA=1;
IT0=1;
EX0=1;
}
void main()
{
init();
while(1)
{
switch(mode)
{
case 0:mode_1();break;
case 1:mode_2();break;
case 2:mode_3();break;
}
}
}
void come0() interrupt 0
{
mode++;
if(mode>2)
mode=0;
}/****************************************
实验题目要求:
设计1个秒计数器,每秒计1次数,在LED上显示出来,计至16清零后重新计数
时间:2012年12月22日
程序撰写者:邹康
******************************************/
#include<reg52.h>
unsigned int k=0;
char number=0;
unsigned char num[4];
sbit led0=P2^3;
sbit led1=P2^4;
sbit led2=P2^5;
sbit led3=P2^6;
void init()
{
EA=1;
ET0=1;
TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
}
void num_change()
{
unsigned char i=0,n=0;
n=number;
for(i=0;i<4;i++)
{
num[i]=n%2;
n=n/2;
}
led0=!num[0];
led1=!num[1];
led2=!num[2];
led3=!num[3];
}
void main()
{
init();
while(1)
{
num_change();
}
}
void time0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
k++;
if(k>=20)
{
k=0;
number++;
if(number>15)
number=0;
}
}/********************************************
实验题目要求:
在上题基础上用按键控制秒计数器的启停,按一次键开始计数,按2次停止计数,按3次又开始计数…。
时间:2012年12月22日
程序撰写者:邹康
********************************************/
#include<reg52.h>
sbit led0=P2^3;
sbit led1=P2^4;
sbit led2=P2^5;
sbit led3=P2^6;
sbit keyz=P2^0;
unsigned char flag=0;
unsigned char k=0,number=0;
unsigned char num[4];
void init()
{
EA=1;
ET0=1;
TH0=(65536-50000)%256;
TL0=(65536-50000)/256;
}
void key()
{
unsigned int m=0;
if(keyz==0)
{
m++;
if(m>=30)
{
flag=!flag;
m=0;
}
}
}
void num_change()
{
unsigned char i=0,n=0; n=number;
for(i=0;i<4;i++) {
num[i]=n%2; n=n/2; }
led0=!num[0];
led1=!num[1];
led2=!num[2];
led3=!num[3];
}
void main()
{
init();
while(1)
{
key();
if(flag==0) TR0=1; else
TR0=0;
num_change(); }
}
void time0() interrupt 1 {
TH0=(65536-50000)%256; TL0=(65536-50000)/256; k++;
if(k>19)
{
number++; if(number>15) number=0; k=0;
}
}
正在阅读:
单片机期末考试编程题05-13
基础会计各章练习题11-30
L-CNG加气站工艺流程06-12
中考语文命题研究第二部分中考题型突破篇专题七语言运用——仿写04-16
增城市2009学年度第一学期期末考试九年级化学试卷参考答案07-24
《左公柳》教学反思06-05
《心理咨询与心理治疗》章节重点06-02
党团知识竞赛题10-19
宏观经济学复习习题集11-16
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 单片机
- 期末
- 编程
- 考试
- 高中新课标数学选修(2-1)空间向量与立体几何测试题
- 2010年6月大学英语三级考试A级真题试卷及答案
- 对严以用权的认识和体会
- 2014年教师资格考试《中学教育知识与能力》全新模拟试题六
- Cygwin使用手册(Unix 模拟器下载安装使用说明)
- 第二章 免疫球蛋白
- 客服部工作及对接流程
- 物流部经理3年述职报告
- 激光技术在医学上的应用
- 等离子体物理学导论
- 苏州太湖旅游实用攻略
- 导尿术的操作方法及注意事项
- 浙江大学运用信息化手段 建设智慧型节能校园
- 三年级上英语学科竞赛试题轻松夺冠_外研社(三起)(,无答案)-文档资料
- 酒店培训--行李组工作岗位流程
- 我国橱柜企业向整体厨房发展的模式探究
- 大型山地自行车赛道
- 甘肃省东乡族、保安族、裕固族育龄妇女生殖健康状况分析
- 汽车行业策略报告
- 2020年教师节活动学习心得体会精选5篇