中国石油大学华东单片机实验程序全部.docx
- 文档编号:8071286
- 上传时间:2023-01-28
- 格式:DOCX
- 页数:26
- 大小:21.74KB
中国石油大学华东单片机实验程序全部.docx
《中国石油大学华东单片机实验程序全部.docx》由会员分享,可在线阅读,更多相关《中国石油大学华东单片机实验程序全部.docx(26页珍藏版)》请在冰豆网上搜索。
中国石油大学华东单片机实验程序全部
中国石油大学(华东)单片机实验所有程序
/*--------------------------看门狗----------------------------*/
/*看门狗定时器溢出中断*/
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);/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 中国 石油大学 华东 单片机 实验 程序 全部