武汉理工大学单片机应用实习报告(8)

1970-01-01 08:00

《武汉理工大学单片机应用》实习报告

附录

一、程序代码见下:

#include #include \#include \#include \

sfr ISP_CONTR = 0xe7; //定义STC89C52单片机ISP寄存器地址

sbit recvLED = P3^6; //接收指示灯

sbit sendLED = P3^7; //发送指示灯

//共阳数码管段选码 //一下的字形以此为: /* 0,1,2,3,4,5, 6,7,8,9,A,B, C,D,E,F, ,-, ],_ */

unsigned char code segTable[]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92, 0x82,0xf8,0x80,0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e,0xff,0xbf, 0xf0,0xf7};

//4位数码管显示缓存

unsigned char num[]={16,16,16,16};

//key为扫描到的按键 //index为显示序号

unsigned char key,index,sec,cnt=0,sendFlag=0,recvNum=0;

void numDisp(void); //数据输入功能 void tempDisp(void); //温度显示功能 void seriComm(void); //串口通信功能 void resetSys(void); //软件复位功能

36

《武汉理工大学单片机应用》实习报告

void delayms(unsigned int ms) //延时 {

unsigned char i; for (;ms;ms--) for (i=110;i;i--); }

void sysInit(void) //系统初始化 {

TMOD = 0x21; //定时器0工作状态1 TH0 = (65536-2000)/256; TL0 = (65536-2000)%6; TH1 = 0xfd; TL1 = 0xfd; TR1 = 1; // REN = 1; SM0 = 1; SM1 = 1; ES = 1; EA = 1; //开总中断 ET0 = 1; //开定时器0中断 TR0 = 1; //启动定时器0 }

void welcome() {

char i;

while(!key) //等待按键,数码管流水显示 { for (i=3;i>=0;i--) { num[0]=num[1]=num[2]=num[3]=16; num[i]=17; delayms(150); if (keyscan()) return; delayms(150); if (keyscan()) return; delayms(150); if (keyscan()) return; }

37

《武汉理工大学单片机应用》实习报告

for (i=0;i<4;i++) { num[0]=num[1]=num[2]=num[3]=16; num[i]=17; delayms(150); if (keyscan()) return; delayms(150); if (keyscan()) return; delayms(150); if (keyscan()) return; } key=keyscan(); } }

void main() {

sysInit(); //系统初始化 welcome(); while(1) { key = keyscan(); switch(key) //根据键值执行功能 { case 'A': numDisp(); break; case 'B': tempDisp(); break; case 'C': seriComm(); break; case 'D': resetSys(); break; default: break; } } }

void Timer0() interrupt 1 //定时器0中断 {

// char i;

TH0 = (65536-2000)/256; //中断时间为2ms TL0 = (65536-2000)%6;

segDuan = 0xff; //关闭数码管,消除影像 segWei = 0xff;

38

《武汉理工大学单片机应用》实习报告

switch(index%4) //依次扫描显示数码管 { case 0: segDuan=segTable[num[0]];segWei=0xfe;break; case 1: segDuan=segTable[num[1]];segWei=0xfd;break; case 2: segDuan=segTable[num[2]];segWei=0xfb;break; case 3: segDuan=segTable[num[3]];segWei=0xf7;break; }

if ((!(sec%2))&&(sendFlag)) { // for (i=0;i<4;i++) { sendLED = 0; SBUF = num[index%4]; while(!TI); TI = 0; sendLED = 1; } }

index++; //索引加一 if (index==100) { index=0; sec++; } }

void Seri() interrupt 4 {

if(RI) { ET0 = 0; RI = 0; num[cnt%4] = SBUF; cnt++; ET0 = 1; recvNum++; if (recvNum==50) { recvNum = 0; recvLED = !recvLED; } }

39

《武汉理工大学单片机应用》实习报告

}

void numDisp(void) //数据输入功能 {

key = 0;

num[0]=16;num[1]=12;num[2]=1;num[3]=18; //数码管显示\ delayms(5000);

num[0]=19;num[1]=num[2]=num[3]=16; //清除 while(!key) //等待按键,同时闪烁光标 { key = keyscan(); if (sec%2) num[0]=16; else num[0]=19; }

num[0]=16; //清楚 while(1) { key=keyscan(); if (key=='B'||key=='C'||key=='D') //若按下了B,C,D键 return; //则退出以切换功能 if (('0'<=key)&&(key<='9')) //若按下了数字键 { num[3]=num[2]; //右移一位 num[2]=num[1]; num[1]=num[0]; num[0]=key-0x30; //转换数字的ASCII码为数字,赋给第一位 } if (key=='c') //两种清除方式 { num[0]=num[1]=num[2]=num[3]=17; } if (key=='b') { num[0]=num[1]=num[2]=num[3]=16; } } }

void tempDisp(void) //温度显示功能 {

40


武汉理工大学单片机应用实习报告(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2016学年上海初一期中考试英语作文范文精选

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

马上注册会员

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