计算机控制技术课后习题 西电版第三章

更新时间:2023-12-05 15:37:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第三章

如图所示,试用中断方式编写程序,对IN0~IN7通道上的模拟电压数据进行一次采集,并将转换结果送入内部RAM 20H单元开始的数据缓冲区中。

D/A转换器一般可分类如下:

1)根据输出是电流还是电压,可以分为电压输出型和电流输出型。 2)根据输出端是串口还是并口,可以分为串行输出型和并行输出型。 3)根据内部是否有锁存器,可以分为无锁存器型和带锁存器型。

例3:根据下图分别输出锯齿波、三角波及方波信号。设选通地址为FEH

#include

#define uchar unsigned char #define uint unsigned int

uchar code DSY_CODE[ ]= {0x3f,0x06,0x5b,0x4F,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; //段码

uchar Pre_KeyNo=16,KeyNo=16; //上次和当前按键的序号,序号范围0~15,16表示无按键 //延时

void DelayMS(uint x) {

uchar i;

while(x--) for(i=0;i<120;i++);

}

//矩阵键盘扫描 void Keys_Scan() {

uchar Tmp;

P1=0x0f; //高4位置0,放入4行 DelayMS(1);

Tmp=P1^0x0f; //异或

switch(Tmp) //判断按键发生于0~3列的哪一列 {

case 1: KeyNo=0;break; case 2: KeyNo=1;break; case 4: KeyNo=2;break; case 8: KeyNo=3;break;

default:KeyNo=16; //无键按下 }

P1=0xf0; //低4位置0,放入4列 DelayMS(1);

Tmp=P1>>4^0x0f;

switch(Tmp) //对0~3行分别附加行首键值0,4,8,12 {

case 1: KeyNo+=0;break; case 2: KeyNo+=4;break; case 4: KeyNo+=8;break; case 8: KeyNo+=12; } }

//主程序 void main() {

P0=0x00; while(1) {

P1=0xf0;

if(P1!=0xf0) Keys_Scan(); //获取键序号 if(Pre_KeyNo!=KeyNo) {

P0=DSY_CODE[KeyNo]; Pre_KeyNo=KeyNo; }

DelayMS(100); } }

#include \char code

dispdata[ ]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; /*数字0-9对应的段选码*/ char dis_data[]={2,4,6,8};

void disp(unsigned char ch0) /*显示函数*/ {

static char ch=0x01; P1=ch;

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

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

void time (void) interrupt 1 /* T0中断服务程序入口,定时1ms */ {

static unsigned char ch1=0; TH0=-1000/256; TL0=-1000%6; disp(ch1); ch1++;

if (ch1==0x04) ch1=0; }

void main(void) {

TMOD=0x01; /* T0为16位定时工作方式*/ TH0=-1000/256; /* 预置计数初值 */ TL0=-1000%6;

EA=1; /* CPU中断开放 */ ET0=1; /* T/C0中断开放 */

本文来源:https://www.bwwdw.com/article/218t.html

Top