单片机大作业整理文档资料.docx
- 文档编号:9190981
- 上传时间:2023-05-17
- 格式:DOCX
- 页数:26
- 大小:46.50KB
单片机大作业整理文档资料.docx
《单片机大作业整理文档资料.docx》由会员分享,可在线阅读,更多相关《单片机大作业整理文档资料.docx(26页珍藏版)》请在冰点文库上搜索。
单片机大作业整理文档资料
单片机设计技术
课程实验作业
学院机械与汽车工程学院
专业过程装备与控制工程(轻机)
学生姓名曾嘉伟陆灏彦
学生学号201230060363201230060189
指导教师钟汉如
日期2014.12.4
目录
1、程序功能描述………………………………………………………………………………2
2、程序流程框图………………………………………………………………………………2
3、程序…………………………………………………………………………………………3
1)主程序…………………………………………………………………………………3
2)头文件…………………………………………………………………………………5
3)子程序…………………………………………………………………………………7
1、程序功能描述
硬件接口:
(PTD0-3接灯泡)
程序开始执行后,4个灯泡按键盘按的数字来亮起。
按键盘数字时,灯按照数字对应的二进制亮起,二进制中0表示不亮,1表示亮起。
例如,按下键盘“9”时,它对应的二进制为1001,所以第一个灯和第四个灯亮起。
键盘和LCD组成计算器,可以满足两个数间的加减乘除。
同时在LCD上显示运算过程和结果。
例如,在键盘上按下“2+3=”的操作,LCD上显示“2+3=5”。
在用数字进行加减乘除运算时,数字对应的灯也会同时亮起。
2、程序流程框图
液晶显示器上显示运算过程及结果
按下键盘数字时,灯按照数字对应的二进制亮起
按下键盘进行两个数的加减乘除操作
3、程序
3.1主程序
/*-------------------键盘中断输入运算语句控制指示灯亮和LCD显示--------------------------*
*文件名:
Keyboard.c*
*硬件连接:
PTA.7-4接键盘4根列线,PTA.3-0接键盘4根行线*
*PTD0-3连接4盏灯泡*
*程序描述:
按下键盘数字时,得到相应的算式及结果*
*灯按照数字对应的二进制亮起,液晶显示器上显示运算过程及结果*
*目的:
键盘扫描,键盘中断,键值识别,键盘编码*
*LCD显示,指示灯*
*注意:
如果键盘插在实验板上排插孔,无须连线,若插在下*
*排插孔,需手工接线*
*-------《嵌入式应用技术基础教程》教学实例------------*/
/*[头文件]*/
#include"GP32C.H"
#include"KB.h"//键盘中断头文件
#defineucharunsignedchar
#defineuintunsignedint
constunsignedcharDispalyInit[]="WaitReceiving..Soochow2005.08";
//voidlcd_display_char(ucharch);//在指定位置(x,y)显示指定的字符ch,x=0-15,y=0-1
voidlcd_display_char(ucharch);//当前光标位置显示指定的字符ch,x=0-15,y=0-1
voidlcd_display_int(ucharx,uchary,intval);//指定位置(x,y)显示指定的整数,x=0-15,y=0-1
externucharKB_value;
/*[主程序]*/
voidmain()
{ucharval1=0,val2=0,op=0,flag=0;
intres;
DDRD=0x0f;//PTD的低4位设置为输出
asm("SEI");//关总中断
KB_Init();
LcdInit();
INTKBSCR&=~(1< asm("CLI");//开总中断 //主循环 while (1) { //* if(KB_value>0)//有新的按键按下 {if((KB_value>='0')&&(KB_value<='9')) {if(flag==2) {flag=0; LcdInit(); } PTD=~(KB_value-'0'); if(flag==0) val1=val1*10+KB_value-'0'; elseif(flag==1) val2=val2*10+KB_value-'0'; lcd_display_char(KB_value); } elseif((KB_value=='+')||(KB_value=='-')||(KB_value=='*')||(KB_value=='/')) {lcd_display_char(KB_value); flag=1; op=KB_value; } elseif(KB_value=='=') {lcd_display_char(KB_value); flag=2; switch(op) { case'+': res=val1+val2;break; case'-': res=val1-val2;break; case'*': res=val1*val2;break; case'/': res=val1/val2;break; } //lcd_display_int(0,1,val1); //lcd_display_int(5,1,val2); lcd_display_int(0,1,res); val1=0; val2=0; op=0; } elseif(KB_value=='C') {LcdInit(); val1=0; val2=0; op=0; res=0; flag=0; } KB_value=0; } //*/ } } 3.2头文件 //GP32C.H(GP32头文件)MC68HC908GP32MCU映像寄存器名 //苏州大学freescaleMCU&DSP研发中心2005年3月版 //[通用I/O口] #definePTA*(volatileunsignedchar*)0x00//A口数据寄存器 #definePTB*(volatileunsignedchar*)0x01//B口数据寄存器 #definePTC*(volatileunsignedchar*)0x02//C口数据寄存器 #definePTD*(volatileunsignedchar*)0x03//D口数据寄存器 #defineDDRA*(volatileunsignedchar*)0x04//A口数据方向寄存器 #defineDDRB*(volatileunsignedchar*)0x05//B口数据方向寄存器 #defineDDRC*(volatileunsignedchar*)0x06//C口数据方向寄存器 #defineDDRD*(volatileunsignedchar*)0x07//D口数据方向寄存器 #definePTE*(volatileunsignedchar*)0x08//E口数据寄存器 #defineDDRE*(volatileunsignedchar*)0x0c//E口数据方向寄存器 #definePTAPUE*(volatileunsignedchar*)0x0d//A口上拉允许寄存器 #definePTCPUE*(volatileunsignedchar*)0x0e//C口上拉允许寄存器 #definePTDPUE*(volatileunsignedchar*)0x0f//D口上拉允许寄存器 //[串行外设接口SPI] #defineSPCR*(volatileunsignedchar*)0x10//SPI控制寄存器 #defineSPSCR*(volatileunsignedchar*)0x11//SPI状态和控制寄存器 #defineSPDR*(volatileunsignedchar*)0x12//SPI数据寄存器 //[串行通信接口SCI] #defineSCC1*(volatileunsignedchar*)0x13//SCI控制寄存器1 #defineSCC2*(volatileunsignedchar*)0x14//SCI控制寄存器2 #defineSCC3*(volatileunsignedchar*)0x15//SCI控制寄存器3 #defineSCS1*(volatileunsignedchar*)0x16//SCI状态寄存器1 #defineSCS2*(volatileunsignedchar*)0x17//SCI状态寄存器2 #defineSCDR*(volatileunsignedchar*)0x18//SCI数据寄存器 #defineSCBR*(volatileunsignedchar*)0x19//SCI波特率寄存器 //[键盘口] #defineINTKBSCR*(volatileunsignedchar*)0x1a//键盘状态和控制寄存器 #defineINTKBIER*(volatileunsignedchar*)0x1b//键盘中断允许寄存器 //[时基模块] #defineTBCR*(volatileunsignedchar*)0x1c//时基模块控制寄存器 //[中断请求] #defineINTSCR*(volatileunsignedchar*)0x1d//中断状态和控制寄存器 //[系统设置] #defineCONFIG2*(volatileunsignedchar*)0x1e//系统设置寄存器2 #defineCONFIG1*(volatileunsignedchar*)0x1f//系统设置寄存器1 //[定时器1] #defineT1SC*(volatileunsignedchar*)0x20//定时器1状态和控制寄存器 #defineT1CNTH*(volatileunsignedchar*)0x21//定时器1计数寄存器(H) #defineT1CNTL*(volatileunsignedchar*)0x22//定时器1计数寄存器(L) #defineT1MODH*(volatileunsignedchar*)0x23//定时器1计数基数寄存器(H) #defineT1MODL*(volatileunsignedchar*)0x24//定时器1计数基数寄存器(L) #defineT1SC0*(volatileunsignedchar*)0x25//定时器1通道0状态和控制寄存器 #defineT1CH0H*(volatileunsignedchar*)0x26//定时器1通道0寄存器(H) #defineT1CH0L*(volatileunsignedchar*)0x27//定时器1通道0寄存器(L) #defineT1SC1*(volatileunsignedchar*)0x28//定时器1通道1状态和控制寄存器 #defineT1CH1H*(volatileunsignedchar*)0x29//定时器1通道1寄存器(H) #defineT1CH1L*(volatileunsignedchar*)0x2a//定时器1通道1寄存器(L) //[定时器2] #defineT2SC*(volatileunsignedchar*)0x2b//定时器2状态和控制寄存器 #defineT2CNTH*(volatileunsignedchar*)0x2c//定时器2计数寄存器(H) #defineT2CNTL*(volatileunsignedchar*)0x2d//定时器2计数寄存器(L) #defineT2MODH*(volatileunsignedchar*)0x2e//定时器2计数基数寄存器(H) #defineT2MODL*(volatileunsignedchar*)0x2f//定时器2计数基数寄存器(L) #defineT2SC0*(volatileunsignedchar*)0x30//定时器2通道0状态和控制寄存器 #defineT2CH0H*(volatileunsignedchar*)0x31//定时器2通道0寄存器(H) #defineT2CH0L*(volatileunsignedchar*)0x32//定时器2通道0寄存器(L) #defineT2SC1*(volatileunsignedchar*)0x33//定时器2通道1状态和控制寄存器 #defineT2CH1H*(volatileunsignedchar*)0x34//定时器2通道1寄存器(H) #defineT2CH1L*(volatileunsignedchar*)0x35//定时器2通道1寄存器(L) //[PLL] #definePCTL*(volatileunsignedchar*)0x36//PLL控制寄存器 #definePBWC*(volatileunsignedchar*)0x37//PLL带宽控制寄存器 #definePMSH*(volatileunsignedchar*)0x38//PLL乘数选择寄存器(H) #definePMSL*(volatileunsignedchar*)0x39//PLL乘数选择寄存器(L) #definePMRS*(volatileunsignedchar*)0x3a//PLLVCO选择寄存器 #definePVRS*(volatileunsignedchar*)0x3a//PMRS的别名(有文献使用) #definePRDS*(volatileunsignedchar*)0x3b//PLL分频选择寄存器 #definePMDS*(volatileunsignedchar*)0x3b//PRDS的别名(有文献使用) //[A/D转换] #defineADSCR*(volatileunsignedchar*)0x3c//A/D转换状态和控制寄存器 #defineADR*(volatileunsignedchar*)0x3d//A/D转换数据寄存器 #defineADCLK*(volatileunsignedchar*)0x3e//A/D转换输入时钟寄存器 //[SIM] #defineSBSR*(volatileunsignedchar*)0xfe00//SIM断点状态寄存器 #defineSRSR*(volatileunsignedchar*)0xfe01//SIM复位状态寄存器 #defineSUBAR*(volatileunsignedchar*)0xfe02//SIM高字节地址寄存器 #defineSBFCR*(volatileunsignedchar*)0xfe03//SIM断点标志控制寄存器 //[中断状态] #defineINT1*(volatileunsignedchar*)0xfe04//中断状态寄存器1 #defineINT2*(volatileunsignedchar*)0xfe05//中断状态寄存器2 #defineINT3*(volatileunsignedchar*)0xfe06//中断状态寄存器3 //[FLASH控制] #defineFLCR*(volatileunsignedchar*)0xfe08//FLASH控制寄存器 //[断点] #defineBRKH*(volatileunsignedchar*)0xfe09//断点地址寄存器(H) #defineBRKL*(volatileunsignedchar*)0xfe0a//断点地址寄存器(L) #defineBRKSCR*(volatileunsignedchar*)0xfe0b//断点状态与控制寄存器 //[LVI] #defineLVISR*(volatileunsignedchar*)0xfe0c//LVI状态寄存器 //[FLASH区保护] #defineFLBPR*(volatileunsignedchar*)0xff7e//FLASH区保护寄存器 //[看门狗] #defineCOPCTL*(volatileunsignedchar*)0xffff//COP控制寄存器 #include"GP32C.H"//MCU头文件 #defineKB_PPTA//键盘接在PTA口上 #defineKB_DDDRA//相应的方向寄存器 #defineKB_PUEPTAPUE//相应的上拉电阻允许寄存器 #defineIntBit1//键盘中断屏蔽位 #defineACKKBit2//键盘中断应答位 externvoidKB_Init(void);//键盘初始化 externunsignedcharKB_Scan(void);//扫描读取键值 externunsignedcharKB_Def(unsignedcharKB_valve);//键值转为定义值 #include"GP32C.H"//MCU头文件 #defineReSendStatusRSCS1//SCI状态寄存器 #defineReTestBit5//接收缓冲区满标志位 #defineSendTestBit7//发送缓冲区空标志位 #defineReSendDataRSCDR//数据寄存器 //串行接收与发送函数声明 unsignedcharSCIRe1(unsignedchar*p);//接收1字节 unsignedcharSCIReN(unsignedcharn,unsignedcharch[]);//接收n字节 voidSCISend1(unsignedcharo);//发送1字节 voidSCISendN(unsignedcharn,unsignedcharch[]);//发送n字节 3.3子程序 /*-----------------------------------------------------* *文件描述: 本文件包含了H08C键盘中断子函数,分别为: * * (1)KB_Init: 键盘初始化函数* *voidKB_Init(void)* * (2)KB_Scan: 扫描读取键值函数* *unsignedcharKB_Scan(void)* *(3)KB_Def: 键值转为定义值函数* *unsignedcharKB_Def(unsignedcharKB_valve)* *-----------------------------------------------------*/ /*[以下为子程序源代码]*/ /*[头文件]*/ #include"GP32C.H" #include"KB.h" /*KB_Init: 键盘初始化函数-------------------------------* *功能: 初始化键盘中断的引脚,但未开放键盘中断* *参数: 无* *返回: 无* *-----------------------------------------------------*/ voidKB_Init(void) { KB_P=0x00;//复位KB_P KB_D=0b00001111;//定定义7-4为输入,3-0为输出 KB_PUE=0b11110000;//定义输入引脚有内部上拉电阻 INTKBSCR|=(1< INTKBIER=0b11110000;//允许输入引脚的中断可进入 INTKBSCR|=(1< } /*KB_Scan: 扫描读取键值函数-----------------------------* *功能: 扫描一次4*4键盘上的按键,读取键值->*p* *若无按键,*p为0xff* *参数: 无* *返回: 扫描到的键值* *-----------------------------------------------------*/ unsignedcharKB_Scan(void) { unsignedcharline,i,tmp; line=0b11111110;//使第一根行线为0(低电平) for(i=1;i<=4;i++)//将扫描4根行线 { tmp=KB_P;//取KB_P->tmp tmp|=0b00001111;//KB_P.7-4保留,KB_P.3-0为1 KB_P=tmp&line;//令KB_P.n=0,n=0、1、2、3 asm("NOP");//等待,消除按键抖动 asm("NOP"); tmp=KB_P; tmp&=0b11110000;//看第n行是否有键按下 if(tmp! =0xf0)//本行有键按下 { tmp=KB_P; break; } else//本行无键按下,扫描下一行 line=(line<<1)|0x01; } if(i==5)tmp=0xff; return(tmp); } /*KB_Def: 键值转为定义值函数----------------------------* *功能: 键值转为定义值* *参数: 键值* *返回: 键定义值* *-----------------------------------------------------*/ //键盘定义表 constunsignedcharKB_Table[]= {0xEE,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 作业 整理 文档 资料