单片机原理及应用——基于Proteus和Keil C(6)

2019-04-09 16:45

P1.5。电路图如下:

键扫描子程序: C程序如下:

uchar keysearch() //按键函数扫描有键按下否(返回值不等于0,说明有键按下)

{

uchar k; P1=0x0f; k=P1; k=~k;

k=k&0x0f; return k; }

uchar key() //按键函数(返回值:等于0xff,说明没有键按下)

{

uchar a,c,kr,keynumb; a=keysearch(); if(a==0) return 0xff; else delay(10); //延时去抖动

a=keysearch(); if(a==0) return 0xff; else { a=0xef; for(kr=0;kr<2;kr++) { P1 = a; c = P1; if((c & 0x01)==0)keynumb=kr+0x00; if((c & 0x02)==0)keynumb=kr+0x02; a=_crol_(a,1); //循环左移函数,需要intrins.h头文件支持 }

} do{

//按键释放检测

a=keysearch(); }while(a!=0); return keynumb; //返回按键的编码键值 }

void keybranch(uchar k) //按键的键值处理函数

{

switch(k) { case 0x00 : //添加需要执行的功能;break; case 0x01 : //添加需要执行的功能;break; case 0x02 : //添加需要执行的功能;break; case 0x03 : //添加需要执行的功能;break; default: break; } }

5.请在图7-1的基础上,设计一个以中断方式工作的开关式键盘,并编写其中断键处理程序。

答案:

电路图如下:

中断键处理程序:

void int_key() interrupt 0 {

delay(10); //delay 10 ms temp = P1;

if( (temp & 0x0f) == 0x0f ) break; temp = P1;

if((temp & 0x0f) == 0x0e) //key1处理函数

if((temp & 0x0f) == 0x0d) if((temp & 0x0f) == 0x0b) if((temp & 0x0f) == 0x07) }

//key2处理函数 //key3处理函数 //key4处理函数

6.状态或数码显示时,对LED的驱动可采用低电平驱动,也可以采用高电平驱动,二者各有什么特点?

答案:

高电平驱动要采用共阴极数码管,必须外接上拉电阻;低电平驱动要采用共阳极数码管,电源效率相对较高。

7.用DAC0832进行D/A转换时,当输出电压的范围在0~5V时,每变化一个二进制数其输出电压跳变约20mV,即输出是锯齿状的,采取何种措施可使输出信号比较平滑?

答案:

两种方法: (1)可以计算移动平均值;

(2)可以设计滤波器的办法。

8.当系统的主频为6MHz时,请计算图7-17中DAC0832产生锯齿波信号的周期。 答案:

T=2μs×8×256=4096μs

9.编写图7-17中用DAC0832产生三角波的应用程序。 答案:

程序功能:连续访问外部DAC寄存器,产生锯齿波

#include #include

#define uchar unsigned char #define uint unsigned int

延时函数

//头文件包含 //宏定义

void delay() {

uint i,j;

for(i=0;i<1;i++) for(j=0;j<120;j++); }

void main() 主函数

{

unsigned char a=0;

while(1) { XBYTE[0x7FFF]=a; a++;

delay( ); } }

//控制波形累加深度

//加入延时函数,控制其周期

10.对图7-24的A/D转换电路,若采用中断方式,编写相应程序。 答案:

在硬件电路上,应当将EOC引脚接到单片机的外部中断引脚上面,如INT1;

C程序如下:

//程序功能:对8路模拟信号轮流采样,并把结果依次存到数组中; #include //头文件定义

#include

unsigned char a[8]; unsigned char i; void main() 主程序 {

EA = 1; IT1= 1; EX1= 1;

XBYTE[0x7FF8] = a[0]; while(1) { } }

void int_adc() interrupt 0 {

a[i] = XBYTE[0x7FF8+i]; i++; if(i>7) i = 0; }

11.当图7-24的ADC0809对8路模拟信号进行A/D转换时,编写用查询方式工作的采样程序,8路采样值存放在30H~37H单元。

答案:

//程序功能:对8路模拟信号轮流采样一次,并把结果依次存放在30H~37H单元;

#include //头文件定义

#include unsigned char a[8]; unsigned char p;

void delay(unsigned char m) 延时函数

{

unsigned char i,j; for(i=0;i

void main() 主程序

{

unsigned char i; p = 0x30;

XBYTE[0x7FF8] = a[0]; for(i=0;i<8;i++) {

delay(10); a[i] = XBYTE[0x7FF8+i]; *[p++] = a[i]; }

while(1); }

第8章

1.哪些场合适合使用单片机系统?

单片机以其自身的特点,其应用领域已渗透入各个领域。

主要应用在: 智能仪器仪表、智能家用电器、实时工业控制、机电一体化。 还广泛应用于办公自动化领域(如复印机)、汽车电路、通信系统(如手机)、计算机外围设备等,成为计算机发展和应用的一个重要方向。

单片机应用系统设计灵活,在系统硬件不变的情况下,可通过不同的程序可实现不同的功能,因此这从根本改变了传统控制系统的设计思想和设计方法。过去必须由模拟电路、数字电路及继电器控制电路实现的大部分功能,现在已能用单片机并通过软件方法实现

2.从事单片机应用系统开发需要具备哪些基本知识和设备配置?

单片机基础知识、计算机通信基础知识、单片机开发板、下载软件及上位计算机。 3.简述单片机应用开发过程。

4.什么是ISP技术?在单片机开发过程中如何使用? ISP:在系统编程.

5.设计完成一个电子时钟,可以根据需要选择实现下列功能: 1)具有显示年、月、日、时、分、秒的功能。 2)具有校正功能。

3)可以选用LED数码管或者LCD显示。 4)能够显示星期、温度等信息;(发挥部分)。 5)具有整点报时、设定闹钟等附加功能。(发挥部分)。 参考下载包第8章项目6.


单片机原理及应用——基于Proteus和Keil C(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2广本自动变速器452

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: