1583|0

1140

帖子

0

TA的资源

纯净的硅(初级)

楼主
 

MSP430单片机原理及应用 实验实例 [复制链接]

实验项目:MSP430简单程序设计 
实验目的:学会用C语言进行简单程序设计 
实验要求:掌握编写排序程序 
实验内容: 
(1)设计一个对8个数据(0-255,任意设置)的由小到大排序程序。 
(2)将结果显示在LCD显示器上。 
程序代码如下:

#include <msp430x14x.h>
#include "Config.h"
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
int ans;         //  全局变量控制输出

//  初始化IO口子程序
void Port_init()
{
        P4SEL = 0x00;
        P4DIR = 0xFF;                   //数据口输出模式
        P5SEL = 0x00;
        P5DIR|= BIT5 + BIT6 + BIT7;     //控制口设置为输出模式
}
//  显示屏命令写入函数
void LCD_write_com(unsigned char com)   
{     
    RS_CLR;  
    RW_CLR;  
    EN_SET;  
    DataPort = com;                 //命令写入端口  
    delay_ms(5);  
    EN_CLR;  
}  

//  显示屏数据写入函数
void LCD_write_data(unsigned char data)   
{  
    RS_SET;  
    RW_CLR;  
    EN_SET;  
    DataPort = data;                //数据写入端口  
    delay_ms(5);  
    EN_CLR;  
}  

//  显示屏清空显示
void LCD_clear() 
{
    LCD_write_com(0x01);            //清屏幕显示
    ans = 0;                        //ans清零
    delay_ms(100);
}

//  显示屏字符串写入函数
void LCD_write_str(unsigned char x,unsigned char y,unsigned char *s)   
{
    if(ans<16)
      LCD_write_com(0x80 + x);        //第一行显示
    else 
      LCD_write_com(0xC0 + x);       //第二行显示
    while(*s) 
    {
        LCD_write_data(*s);
        s++;
    }
}


//  显示屏初始化函数
void LCD_init() 
{
    ans = 0;
    LCD_write_com(0x38);        //显示模式设置  
    delay_ms(5);
    LCD_write_com(0x08);        //显示关闭
    delay_ms(5);
    LCD_write_com(0x01);        //显示清屏
    delay_ms(5);
    LCD_write_com(0x06);        //显示光标移动设置
    delay_ms(5);
    LCD_write_com(0x0C);        //显示开及光标设置
    delay_ms(5);
}


//  主程序
void main(void)
{
     WDT_Init();                         //看门狗设置
     Clock_Init();                       //系统时钟设置
     Port_init();                        //系统初始化,设置IO口属性
     delay_ms(100);                      //延时100ms
     LCD_init();                         //液晶参数初始化设置
     LCD_clear();                        //清屏

     int a[8]={12,123,22,2,1,125,19,3};//自己定义数据
     int i, j;
     //对数据进行排序
     for(i=0;i<8;i++)
     {
          for(j=0;j<7-i;j++)
          {
              if(a[j]>a[j+1])
              {
                  int temp = a[j];
                  a[j] = a[j+1];
                  a[j+1] = temp;
              }
          }
     }
     while (1) 
      {
          //字符串输出显示
          LCD_clear();
          ans = 0;
          int k = 0;
          for(i=0;i<15;i++)
          {
              char str[3];
              if(i%2==0)
              {
                  if(a[k]/100==0)      //不够三位数字
                   {
                     if(a[k]/10==0)        //只有一位数字
                     {
                       str[2] = a[k]%10+'0';
                       str[0] = str[1] = '0';
                     }
                     else           //两位数字
                     {
                       str[2] = a[k]%10+'0';
                       str[0] = '0'; 
                       str[1] = a[k]/10+'0';
                     }
                   }
                   else        //三位数字
                   {
                       str[2] = a[k]%10+'0';
                       str[0] = a[k]/100+'0'; 
                       str[1] = a[k]%100/10+'0';
                   }
                   LCD_write_str(ans%16,ans/16, str);
                   k++;
                   ans += 3;
                 }
                 else
                 {
                   LCD_write_str(ans%16,ans/16,"<");
                   ans++;
                 }
             }
     delay_ms(2000);
      }
}

 

 
点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表