文章目录
- 前言
- 一、软件基础
- 二、CCS生成需要的hex文件
-
- 1.建立工程和设置
- 2.写代码
- 三、proteus搭建电路与载入hex
- 总结
前言
又是一年电子信息杯,每年单片机都有很多人放弃,我那时在环境搭建上耗了很多时间
这里分享一个我很早写的一个数码管显示的代码和整体流程,希望能对后来人有所帮助
一、软件基础
proteus和CCS(我用的是CCS9.3.0和proteus8.6)
下载和安装破解只要在CSDN上搜索就行,这里给出两个链接,如果你按流程安装有问题欢迎评论区指出
CCS
proteus
二、CCS生成需要的hex文件
1.建立工程和设置
file→new→CCS project 设置如下,选中芯片msp430g2553,创建工程名字(segdisplay),点击finish

点击apply and close。
2.写代码
代码如下(示例):
/* ************************************************************* * 电子信息杯初赛代码 *创建date 2019_12_03 * by hwk HeWenKang@bupt.edu.cn*********************************************************** *//* *************************************************************写于2020_12_11回看这些代码真是黑历史-=也不知道这个代码能不能正常运行,如果不行多看看引脚定义有没有问题建议早点看中断内容,脱离轮询的笨办法;在src里面多创建一些文件,按功能分类放;多些注释,养成良好习惯;多用define,增强代码的可移植性;函数命名多用下划线和英文测频率和占空比可以用定时器捕获,但是proteus仿真有点问题,管脚和代码里对应不上,可能存在进不去中断的情况单片机路漫漫其修远兮,加油冲冲冲*********************************************************** */#include /* ************************************************************* * 1ms延时函数 * 延时函数,具体延时的值根据主时钟频率改变而改变,调节内部i大小即可 * by hwk HeWenKang@bupt.edu.cn*********************************************************** */void delay_1ms(void) {unsigned int i;for (i = 0; i40; i++); }/******************************************************************* * nms延时函数 * 延时函数,具体延时的值根据主时钟频率改变而改变 * by hwk HeWenKang@bupt.edu.cn *******************************************************************/void delay_nms(unsigned int k) {unsigned int i = 0;for (i = 0; i k ; i++) delay_1ms(); }/******************************************************************* * 引脚初始化函数 * 设置引脚输入输出 * by hwk HeWenKang@bupt.edu.cn *******************************************************************/void GPIO_Init(void) { P1OUT = 0;//P1初始值为0x00; P1DIR|=BIT1+BIT2+BIT3+BIT4+BIT5; // P1.1、p1.2、P1.3、P1.4设为输出(置1) P1DIR&=~BIT7; P2OUT = 0;//P2初始值为0x00; P2DIR|=BIT0+BIT1+BIT2+BIT3+BIT4+BIT5+BIT6+BIT7; // P2设为输出(置1) }/* ****************************************************************** * 7位数码管数字输出辅助函数 * m==3处是小数点,所以比较特殊,原理就是扫频,m是第几位,n是该位数字 * by hwk HeWenKang@bupt.edu.cn *********************************************************************/void segprintf(unsigned int m,unsigned int n){ P1OUT=0; if(m==1) {P1OUT = BIT1;P2OUT =0XFF; } else if(m==2) {P1OUT = BIT2;P2OUT =0XFF; }else if(m==3) { P1OUT = BIT3;P2OUT =0XFF; } else if(m==4) {P1OUT = BIT5;P2OUT =0XFF;} else P1OUT=0; if(m==3) { switch(n){ case 0: P2OUT=BIT1;break; case 1: P2OUT=BIT1+BIT2+BIT3+BIT4+BIT7;break; case 2: P2OUT=BIT2+BIT5;break; case 3: P2OUT=BIT2+BIT3;break; case 4: P2OUT=BIT3+BIT4+BIT7;break; case 5: P2OUT=BIT3+BIT6;break; case 6: P2OUT=BIT6;break; case 7: P2OUT=BIT1+BIT2+BIT3+BIT4;break; case 8: P2OUT =0;;break; case 9: P2OUT=BIT3;break; }} else { switch(n){ case 0: P2OUT=BIT0+BIT1;break; case 1: P2OUT=BIT0+BIT1+BIT2+BIT3+BIT4+BIT7;break; case 2: P2OUT=BIT0+BIT2+BIT5;break; case 3: P2OUT=BIT0+BIT2+BIT3;break; case 4: P2OUT=BIT0+BIT3+BIT4+BIT7;break; case 5: P2OUT=BIT0+BIT3+BIT6;break; case 6: P2OUT=BIT0+BIT6;break; case 7: P2OUT=BIT0+BIT1+BIT2+BIT3+BIT4;break; case 8: P2OUT =BIT0 ;break; case 9: P2OUT=BIT0+BIT3;break; } } delay_nms(1);// P1OUT=0;// P2OUT=0;}/* ****************************************************************** * 频率输出函数 * 待补充 * by hwk HeWenKang@bupt.edu.cn *********************************************************************/int frequency(void) {return(1314); }/* ****************************************************************** * 占空比输出函数 * 待补充* by hwk HeWenKang@bupt.edu.cn *********************************************************************/int dutycycle(void) { return (1413); }/* ****************************************************************** * 7位数码管数字输出函数 * 输入4位数k,函数取每一位的数,通过函数segprintf(a,b)将每一位在对应位输出 * by hwk HeWenKang@bupt.edu.cn *********************************************************************/void printfseg(unsigned int k){ unsigned int a; unsigned int b; b=k/1000; a=4; segprintf(a,b); k=k-1000*b; b=k/100; a=3; segprintf(a,b); k=k-100*b; b=k/10; a=2; segprintf(a,b); k=k-10*b; b=k; a=1; segprintf(a,b);}/* ****************************************************************** * 主函数 *尽量把函数写在外面,最好写在别的文件里面然后include,main函数越简单越好 * by hwk HeWenKang@bupt.edu.cn *********************************************************************/int main(void) {WDTCTL = WDTPW | WDTHOLD;// 关闭看门狗,我也不知道为什么,但基本上都有这个代码,好像是为了防止程序跑飞// BCSCTL1 = CALBC1_1MHZ;// DCOCTL = CALDCO_1MHZ;// BCSCTL2 = SELM_0 | DIVM_0 | DIVS_3;GPIO_Init();//定义引脚功能unsigned int f=0;unsigned int z=0;f=frequency();z=dutycycle();while(1)//用中断可以节省资源,但是不太会,用轮询方式消耗资源达到效果,反正他不看源代码:( { while(1声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!