历史上的今天
今天是:2025年02月06日(星期四)
2020年02月06日 | msp430 按键 中断 轮询
2020-02-06 来源:eefocus
msp430 数码管 key 中断 轮询
仿真见我的上传资源
/******************************************************************
* 实验名称:IO特性(MSP430F249)
*
* 实验说明:
* 通设置系统主时钟(MCLK=8Mhz ) 、辅助时钟(ACLK=8Mhz )、
* 子系统时钟(SMCLK=8Mhz )
* 编译软件:Embedded Workbench 5.3
******************************************************************/
#include #define uchar unsigned char #define uint unsigned int void delayms(); uchar key = 0; uchar table[16] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; uchar key_table[4][4] = { 1,2,3,4, 5,6,7,8, 9,10,11,12, 13,14,15,16}; // 键值编码,对应一个4×4 矩阵 uchar position[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; uchar num_table[8]= {0,0,0,0,0,0,0,0}; uchar row_table[4]= {0xef,0xdf,0xbf,0x7f}; void show(uchar pos,uchar num) { P4OUT = 0x00; // tobe all turn off P6OUT |= 0x40; // DUAN 1 P4OUT = table[num]; //DUAN NUM P6OUT &= 0XBF; // DUAN 0 P4OUT = 0XFF; P5OUT |= 0X20; P4OUT &= position[pos]; P5OUT &= 0XDF; } uchar key_scan(int num) { uchar line = 0,temp = 0; P1OUT = row_table[num]; temp = P1IN&0x0f; if(temp != 0x0f) { delayms(10); temp =P1IN&0x0f; if(temp != 0x0f) { while(temp ==0x0f){temp =P1IN&0x0f;} //wait button off switch(temp) { case 0x0e: line = 0;break; case 0x0d: line = 1;break; case 0x0b: line = 2;break; case 0x07: line = 3;break; } return key_table[num][line]; } return 0; } return 0; } uchar Key_scan() { uchar i=0; i = key_scan(0); if(i != 0) return i; i = key_scan(1); if(i != 0) return i; i = key_scan(2); if(i != 0) return i; i = key_scan(3); return i; } void delayms(uint t) { uint i; while(t--) for(i=1330;i>0;i--);//进过参数的调整 } void main(void) { uchar i=0,key1=0; P1DIR = 0XFF;P1OUT = 0XFF; P2DIR = 0XFF;P2OUT = 0XFF; P3DIR = 0XFF;P3OUT = 0XFF; P4DIR = 0XFF;P4OUT = 0XFF; P5DIR = 0XFF;P5OUT = 0XFF; P6DIR = 0XFF;P6OUT = 0XFF; P6DIR |= 0X40; // p6^6 output P5DIR |=0X20; // P5^5 OUTPUT P4DIR = 0XFF; // P4 OUTPUT P1SEL = 0; // P1DIR = 0xF0; //p1.0--p1.3 IN ,p1.4--p1.7 OUT P1OUT |= 0XF0; P1IE |= 0x08; P1IES |= 0X08; // P1IFG &= ~0x08; _EINT(); WDTCTL=WDTPW + WDTHOLD; // 关闭看门狗 /*while(1) { show(0,key); delayms(10); //按键中断测试程序 }*/ /*轮询按键测试程序 while(1) { i = key_scan(0); if(i!=0) key1 = i; show(0,key1); }*/ } #pragma vector = PORT1_VECTOR __interrupt void PORT1_ISR(void) { key++; if(key == 9) key = 0; P1IFG &= ~0x08; return ; }
史海拾趣
|
我的keil 老是出错, 比如: void main(void) { unsigned int w; w=10; } 程序执行到‘}’结束符就出错。 *** error 65: access violation at C:0x0A00 &nb ...… 查看全部问答> |
|
小弟这两天碰到一个很诡异的问题。 我在以前写的工程中加入代码调试运行时,新写的代码不运行。具体如下: 假如先前函数代码: [code]OnBnClickedBtnPrint1() { int a=0; a++; &nb ...… 查看全部问答> |
|
渥瑞达“3G移动开发”免费试听课于北京交通大学举行,欢迎大家光临! 渥瑞达“3G移动开发”免费试听课于北京交通大学举行,欢迎大家光临! 渥瑞达“3G移动开发”免费试听课于北京交通大学举行,欢迎大家光临! 详情请参见 www.neworigin.net 同时欢迎大家与我们的609期学员交流!这期学员已与2月11日毕业 ...… 查看全部问答> |
|
打算用MAX7456,需要个27M的晶振。想把晶振省掉,用STM32的MCO来输出给它。 该CLKIN输入datasheet如下,VDVCC是5V供电。 下载 (31.48 KB) 2011-1-28 09:37 打算STM32用9M的晶振,PLL用6倍频到主时钟54M,然后MCO用PLL ...… 查看全部问答> |
|
我设备的需求是:将网卡接收到的一帧数据(一帧包括261个数据,每个数据都是一个十六进制如0xc2),通过USB发送到上位机。 我将STM32的USB虚拟串口驱动(V3.1版)按照我的要求进行修改并实现了该功能,起初我USB虚拟串口 ...… 查看全部问答> |




