计算机控制 下载本文

{

EX0=0;

ave=sum/0x08; *addata=ave;

}

*adch=0x03; //启动A/D工作 }

void main() {

i=0x00;

adch=0x7fff; addata=0x20; sum=0; EA=1; EX0=1; IT0=1;

*adch=0x03; //启动A/D工作 while(1); }

3.6 根据下图输出连续梯形波,波形如图3所示。设选通地址为FEH。

ALE MCS-51 单 片 机 WR P0 锁 存 器 DAC0832 VREF 译 FEH 码 CS 器 XFER Rfb +5V ILE Iout1 D0~D7 Iout2 WR1 WR2 V 60ms t 答:

梯形波

51单片机与DAC0832的接口

+5V _ -+ Vout A #include #include

#define DAC0832 XBYTE[0xfe] #define uchar unsigned char uchar flag;

void INI_TIMEOUT(void) \\*定时60ms输出最大电压*\\ {

TMOD=0x01;

TH0=(65536-60000)/256; TL0=(65536-60000)%6; EA=1; ET0=1; TR0=1;

DAC0832=0xff; flag=0x01; }

void int(void) interrupt 1\\*定时中断子程序*\\ {

EA=0; ET0=0; TR0=0; flag=0x00; }

void delay(void) {

uchar j;

for(j=0;j<100;j++) }

void main() {

uchar i; while(1) {

for (i=0; i<0xff ;i=i++) {

DA0832=i; delay(); }

INIT_TIMEOUT(); while(flag==0x01);

for (i=0xff; i>0; i=i--) {

DA0832=i; delay(); } } }

第四章作业

4.1 LED显示器扫描方式有哪两种?简述其工作原理。

答:分为静态扫描和动态扫描。静态扫描:微型计算机一次输出显示模型后,LED能保持显示该结果,直到下次发送新的显示模型为止。动态显示:微型计算机实时的对LED扫描,让显示单元分时工作,只要扫描频率够快,就会感觉所有器件均在显示。

4.2 一个4位LED显示器,试用C语言,编写高位0不显示的处理程序。假设四位数据存放在DPBUF开始的四个单元,低位在前。

答:判断DPBUF开始的单元,从高位向低位判断,最低位不用判断;如果最高位为0,将这位对应的dispdata[j]中置为0x00,让数码管无显示,并继续判断次高位,以此类推。假设显示char DPBUF[4];其中ch0为待显示数据的序号,P1口送位选码,P1.0选中最高位,P1.3选中最低位。则高位不显示0的显示函数如下:

char code dispdata[ ]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; void disp(unsigned char ch0) /*显示函数*/ {

static char ch=0x01; P1=ch;

if((DPBUF[ch0]==0)&&(ch!=0x08)) P1=0x00;

P2= dispdata[DPBUF[ch0]]; ch=ch<<1;

if (ch==0x10) ch=0x01; }

4.3 如图4.1的电路,使用外部中断,编写按键程序,要求完成如下简单功能:

按下按键1,P1.3输出一个负脉冲;按下按键2,P1.4输出高电平;按下按键3,P1.5输出低电平。

+5VP1.0P1.189C51P1.2P1.3P1.4P1.5INT0&图4.1 题4.1图

答:

#include sbit P1_0=P1^0; sbit P1_1=P1^1; sbit P1_2=P1^2; sbit P1_3=P1^3; sbit P1_4=P1^4; sbit P1_5=P1^5;

void int(void) interrupt 0 \\\\中断服务程序 {

if(P1_0==0) {

delay(100); \\\\消抖 if(P1_0==0) {

P1_3=1; \\\\输出负脉冲 delay(500); P1_3=0; delay(500); P1_3=1; } }

if(P1_1==0) {

delay(100); if(P1_1==0) {

P1_4=1; \\\\输出高电平

S1S2S3负脉冲高电平+5V低电平0V