中国石油大学华东单片机实验程序全部.docx

上传人:b****5 文档编号:8071286 上传时间:2023-01-28 格式:DOCX 页数:26 大小:21.74KB
下载 相关 举报
中国石油大学华东单片机实验程序全部.docx_第1页
第1页 / 共26页
中国石油大学华东单片机实验程序全部.docx_第2页
第2页 / 共26页
中国石油大学华东单片机实验程序全部.docx_第3页
第3页 / 共26页
中国石油大学华东单片机实验程序全部.docx_第4页
第4页 / 共26页
中国石油大学华东单片机实验程序全部.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

中国石油大学华东单片机实验程序全部.docx

《中国石油大学华东单片机实验程序全部.docx》由会员分享,可在线阅读,更多相关《中国石油大学华东单片机实验程序全部.docx(26页珍藏版)》请在冰豆网上搜索。

中国石油大学华东单片机实验程序全部.docx

中国石油大学华东单片机实验程序全部

中国石油大学(华东)单片机实验所有程序

/*--------------------------看门狗----------------------------*/

/*看门狗定时器溢出中断*/

voidmain(void){

WDTCTL=WDTPW+WDTSSEL_1+WDTTMSEL+WDTIS_4;//选择时钟源ACLK,定时器模式,1S定时

SFRIE1|=WDTIE;

P1DIR|=BIT0;

P1OUT|=BIT0;

_BIS_SR(GIE+LPM3_bits);

}

#pragmavector=WDT_VECTOR

__interruptvoidwatchdog(void){

P1OUT^=BIT0;

}

/*-----------------------------------------------------------*/

/*----------------------------定时器--------------------------*/

/*一、增计数时从TACCR0-1增到TACCR0时触发比较中断,

而TACCR0再继续计数时会溢出触发溢出中断*/

/*1.TACCR0——>0溢出中断*/

#include"MSP430F5529.h"

voidmain(void){

WDTCTL=WDTPW+WDTHOLD;

P1DIR|=BIT0;

P1OUT|=BIT0;

TA0CTL|=TASSEL_1+MC_1+TAIE+TACLR;

TA0CCR0=32768-1;

_BIS_SR(GIE+LPM0_bits);

}

#pragmavector=TIMER0_A1_VECTOR

__interruptvoidTAflow(void){

switch(TA0IV){

case14:

P1OUT^=BIT0;

break;

}

}

/*2.TACCR0-1——>TACCR0触发比较中断,注意进中断后

*TACCR0会清零所以要重装TACCR0的值*/

#include"MSP430F5529.h"

voidmain(void){

WDTCTL=WDTPW+WDTHOLD;

P1DIR|=BIT0;

P1OUT|=BIT0;

TA0CTL|=TASSEL_1+MC_1+TACLR;//选择ACLK为时钟源,增计数,计数器清零

TA0CCR0=32768-1;//装入比较值

TA0CCTL0|=CCIE;//使能捕获比较中断

_BIS_SR(GIE+LPM0_bits);

}

#pragmavector=TIMER0_A0_VECTOR

__interruptvoidTAflow(void){

P1OUT^=BIT0;

TA0CCR0=32768-1;//重新装入比较值

}

/*二、连续计数,TA0CCR0中断,溢出中断*/

#include"MSP430F5529.h"

voidmain(void){

WDTCTL=WDTPW+WDTHOLD;

P1DIR|=BIT0;

P1OUT|=BIT0;

P8DIR|=BIT1;

P8OUT|=BIT1;

TA0CTL|=TASSEL_1+MC_2+TACLR+TAIE;

//选择ACLK为时钟源,连续计数,计数器清零,溢出中断使能

TA0CCR0=20000;//装入比较值

TA0CCTL0|=CCIE;//使能捕获比较中断

_BIS_SR(GIE+LPM0_bits);

}

//比较中断

#pragmavector=TIMER0_A0_VECTOR

__interruptvoidTAflow(void){

P1OUT^=BIT0;

TA0CCR0+=20000;//重新装入比较值

}

//溢出中断

#pragmavector=TIMER0_A1_VECTOR

__interruptvoidTAFLOW(void){

switch(TA0IV){

case14:

P8OUT^=BIT1;

break;

}

}

/*-----------------------------------------------------------*/

/*--------------------------ADC12----------------------------*/

/*课件第一个例子*/

intADC12_Result;

ADC12CTL1|=ADC12CONSEQ_2;//单通道重复采样模式

ADC12CTL0|=ADC12SREF2_5V+ADC12REFON;

//选择内部参考源2.5V,打开基准源,打开ADC内核

ADC12CTL0|=ADC12SHT0_4;//过采样率设置为64个采样周期,打开AD转换

ADC12CTL1|=ADC12SSEL_1+ADC12DIV_1;

//ACLK2分频为采样时钟

ADC12MCTL0|=ADC12INCH_1;//选择通道A1

ADC12CTL0|=ADC12ON;//开启ADC12

for(inti=0;i<20;i++){

ADC12CTL0|=ENC+ADC12SC;//开始转换

while((BIT0&ADC12IFG)==0);//等待ADC12IFG标志变高(转换完成)

ADC12_Result+=ADC12MEM0;//读取采样结果

}

ADC12_Result=ADC12_Result/20;

/*-----------------------------------------------------------*/

 

/*----------------------------实验程序---------------------------*/

/*---------------------------实验2---------------------------*/

/*1.控制指示灯LED1、LED2和LED3闪烁*/

#include

voidmain(void)

{

volatileunsignedinti;

WDTCTL=WDTPW+WDTHOLD;//关闭看门狗

P1DIR|=BIT0;//P1.0设为输出

P8DIR|=BIT1+BIT2;//P8.1P8.2设为输出

while

(1)//死循环

{

P1OUT^=BIT0;//P1.0取反输出

P8OUT^=(BIT1+BIT2);//P8.1P8.2取反输出

for(i=50000;i>0;i--);//延迟

}

}

/*2.LED4亮,LED5和LED6灭,然后LED5亮,LED4和LED6灭,

然后LED6亮,LED4和LED5灭,按此顺序循环*/

#include

voidmain(void)

{

volatileunsignedinti;

WDTCTL=WDTPW+WDTHOLD;//关闭看门狗

P1DIR|=BIT1+BIT2+BIT3;//P1.1P1.2P1.3设为输出

while

(1)//死循环

{

P1OUT=0x02;//P1.1输出高,P1.2P1.3输出低

for(i=0;i<60000;i++);

P1OUT=0x04;//P1.2输出高,P1.1P1.3输出低

for(i=0;i<60000;i++);

P1OUT=0x08;//P1.3输出高,P1.1P1.2输出低

for(i=0;i<60000;i++);

}

}

/*3.检测按键S1,按键按下时产生IO口输入中断,设置变量NUM记录按键次数*/

#include

unsignedintNUM=0;

voidmain(void)

{

WDTCTL=WDTPW+WDTHOLD;//关闭看门狗

P1DIR&=~BIT7;//P1.7设置为输入

P1OUT|=BIT7;

P1REN|=BIT7;//P1.7上拉使能

P1IES|=BIT7;//下降沿触发中断

P1IE|=BIT7;//IO中断使能

P1IFG&=~BIT7;

_BIS_SR(LPM3_bits+GIE);//进入低功耗模式LPM3,开总中断

while

(1);

}

#pragmavector=PORT1_VECTOR

__interruptvoidport1_7inter(void){

NUM++;

P1IFG&=~BIT7;//清中断标志

}

/*4.4.检测按键S1,按键按下时中断,按键控制LED4交替点亮或熄灭,

即按键按一下LED4,按键再按一下LED4灭,如此循环*/

#include

voidmain(void)

{

WDTCTL=WDTPW+WDTHOLD;//关闭看门狗

P1DIR|=BIT0;//P1.0设置为输出

P1DIR&=~BIT7;//P1.7设置为输入

P1OUT|=BIT7;

P1REN|=BIT7;//P1.7上拉使能

P1IES|=BIT7;//下降沿触发中断

P1IE|=BIT7;//IO中断使能

P1IFG&=~BIT7;

_BIS_SR(LPM3_bits+GIE);//进入低功耗模式LPM3,开总中断

while

(1);

}

#pragmavector=PORT1_VECTOR

__interruptvoidport1_7inter(void){

P1OUT^=BIT0;

P1IFG&=~BIT7;//清中断标志

}

/*-----------------------------------------------------------*/

/*---------------------------实验3---------------------------*/

/**/

/*LCD_TestbyTY.c

*1.show"a=x,b=x,sum=a+b=x"

*2.graphy(trangle,rectangle,line,trapezium)andmovetheshape

*3.settheContrastandbacklight

*/

#include"msp430f5529.h"

#include"HAL_Dogs102x6.h"

#include"string.h"

#include

#include

#defineuintunsignedint

uinta=1;

uintb=2;

uintSum=0;

uintpage=0;//第0页是菜单,第1页是功能实现

uintselector=0;//所选择项的标志

uinty=0;//上下移动的坐标

uintcontrast=15,backlight=5;

/****子函数****/

voidIO_init(void);

voidCrystal_init(void);

voidDraw_absum(void);

voidLCD_mainmenu(void);

voidpaint(uintx,uinty,uintflag);

voidmain(void){

/****initial****/

WDTCTL=WDTPW+WDTHOLD;//关闭看门狗

IO_init();//IO初始化

LCD_init();//LCD初始化

GIE;//开启总中断

LPM3;

}

/****IOinitial****/

voidIO_init(void){

/****setthes1(P1.7)****/

P1DIR&=~BIT7;//P1.7设置为输入

P1OUT|=BIT7;

P1REN|=BIT7;//上拉电阻使能

P1IE|=BIT7;//中断使能

P1IES|=BIT7;//下降沿触发

P1IFG&=~BIT7;//中断标志清除

/****setthes2(P2.2)****/

P2DIR&=~BIT2;//P2.2设置为输入

P2OUT|=BIT2;

P2REN|=BIT2;//上拉使能

P2IE|=BIT2;//中断使能

P2IES|=BIT2;//下降沿触发

P2IFG&=~BIT2;//中断标志清除

}

/****LCDinitial****/

voidLCD_init(void){

Dogs102x6_init();

Dogs102x6_backlightInit();

Dogs102x6_clearScreen();

}

/****S1interrupt****/

#pragmavector=PORT1_VECTOR

__interruptvoidP1_7(void){

unsignedinti;

if(!

(P1IN&BIT7)){

for(i=100;i>0;i--);//消抖

while(!

(P1IN&BIT7));

for(i=100;i>0;i--);

if(page==0){

if(selector==6)selector=0;

selector++;

Dogs102x6_clearImage(48,6,8,0);//清除选项标志'*'

Dogs102x6_charDraw(selector,0,'*',0);

}else{

switch(selector){

case1:

a++;

Dogs102x6_stringDraw(0,0,"a=1,b=2,sum=a+b",0);

Draw_absum();

break;

case2:

paint(0,y,0);//绘制图形

break;

case3:

paint(0,y,1);

if(y==38)y=0;//重置纵坐标

y++;//纵坐标增加

break;

case4:

paint(0,y,1);

if(y==0)y=38;//重置纵坐标

y--;//纵坐标减

break;

case5:

charbuffer[15];

contrast++;//对比度增加

if(contrast==32)contrast=0;//重置对比度

Dogs102x6_setContrast(contrast);//设置对比度

/****显示对比度值****/

sprintf(buffer,"Contrast=%d",contrast);

Dogs102x6_stringDraw(4,12,buffer,0);

break;

case6:

charbuffer[15];

backlight++;//增加背光亮度

if(backlight==12)backlight=0;//重置背光

Dogs102x6_setBacklight(backlight);//设置背光

/****显示背光值****/

sprintf(buffer,"Backlight=%d",backlight);

Dogs102x6_stringDraw(4,12,buffer,0);

break;

default:

break;

}

}

}

P1IFG&=~BIT7;

}

/****S2中断****/

#pragmavector=PORT2_VECTOR

__interruptvoidP2_2(void)

{

if(!

(P2IN&BIT2))

{

for(i=100;i>0;i--);

while(!

(P2IN&BIT2));

for(i=100;i>0;i--);

if(page==0){

page==1;

switch(selector){

case1:

//显示a,b,sum

Draw_absum();

break;

case2:

//绘制图形

paint(0,0,0);

break;

case3:

//下移图形

paint(0,y,1);

break;

case4:

//上移图形

paint(0,y,1);

break;

case5:

//显示对比度

charbuffer[15];

sprintf(buffer,"Contrast=%d",contrast);

Dogs102x6_stringDraw(4,12,buffer,0);

break;

case6:

//显示背光值

charbuffer[15];

sprintf(buffer,"Backlight=%d",backlight);

Dogs102x6_stringDraw(4,12,buffer,0);

break;

default:

break;

}

}else{

page=0;

LCD_mainmenu();

}

}

P2IFG&=~BIT2;//中断标志清除

}

/*menu:

*Caculatea+b

*Paint

*Contrast

*backlight

*/

voidLCD_mainmenu(void){

Dogs102x6_clearScreen();//清屏

Dogs102x6_stringDraw(0,36,"Menu:

",0);

Dogs102x6_stringDraw(1,6,"Calculatea+b",0);

Dogs102x6_stringDraw(2,6,"Paint",0);

Dogs102x6_stringDraw(3,6,"Movedown",0);

Dogs102x6_stringDraw(4,6,"Moveup",0);

Dogs102x6_stringDraw(5,6,"Contrast",0);

Dogs102x6_stringDraw(6,6,"backlight",0);

}

/****a=1,b=2,sum=a+b****/

voidDraw_absum(void){

Dogs102x6_clearScreen();//清屏

Sum=a+b;

charbuffer[12];

sprintf(buffer,"a=%d",a);//数字——>字符串

Dogs102x6_stringDraw(4,0,buffer,0);//“a=1”

sprintf(buffer,"B=%d",b);

Dogs102x6_stringDraw(5,0,buffer,0);//“B=2”

sprintf(buffer,"Sum=a+b=%d",Sum);

Dogs102x6_stringDraw(6,0,buffer,0);//“Sum=a+b=3”

}

/****drawtheshapes****/

voidpaint(uintx,uinty,uintflag){

Dogs102x6_clearScreen();//clearthescreen

/**********************trangle**********************/

Dogs102x6_horizontalLineDraw(5+x,45+x,25+y,0);

Dogs102x6_verticalLineDraw(5+y,25+y,5+x,0);//drawaverticalline

Dogs102x6_lineDraw(5+x,5+y,45+x,25+y,0);//drawaline

 

if(flag==0){

/************************line***********************/

Dogs102x6_horizontalLineDraw(0,101,32,0);//drawahorizontalline

Dogs102x6_verticalLineDraw(0,64,51,0);//drawaverticalline

Dogs102x6_lineDraw(5,5,96,58,0);//drawaline

 

/***********************circle**********************/

Dogs102x6_circleDraw(60,45,10,0);//drawacircle

/**********************rectangle********************/

Dogs102x6_horizontalLineDraw(5,45,35,0);

Dogs102x6_horizontalLineDraw(5,45,55,0);

Dogs102x6_verticalLineDraw(35,55,5,0);

Dogs102x6_verticalLineDraw(35,55,45,0);/

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1