找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3378|回复: 3
打印 上一主题 下一主题
收起左侧

MSP430做AD转换并在液晶12864上显示的程序,液晶上没有任何显示啊

[复制链接]
跳转到指定楼层
楼主
ID:50602 发表于 2013-5-28 14:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
程序如下:单通道单次转换:
  1. #include <msp430x14x.h>

  2. double data;//用来存储ADC12MEM中的数据
  3. unsigned int a,b,c=0; //用来存储将要显示在LCD上的各位数据

  4. //初始化时钟
  5. void initClock(void){
  6. BCSCTL1=RSEL2+RSEL1+RSEL0+DIVA_1;//XT2开启 LFXT1工作在低频模式 ACLK 2分频( 注释:原来的人没做分频,我担心频率过高) 最高的标称频率
  7. DCOCTL=DCO2+DCO1+DCO0;//DCO为最高频率
  8. do{
  9. IFG1&=~OFIFG;//清除振荡器失效标志
  10. for(unsigned int i=255;i>0;i--);
  11. }while(IFG1&OFIFG);//判断XT2是否起振
  12. BCSCTL2=SELM1+SELS;//MCLK SMCLK时钟源为TX2CLK不分频
  13. }
  14. //延时函数
  15. void delay(unsigned int m){
  16. for(unsigned int i=0;i<m;i++)
  17. _NOP();
  18. }


  19. //ADC12采样初始化,并打开中断子程序计算采样值的大小
  20. void initADC12(){

  21. P6SEL=0X01;//P6.0作为模拟输入
  22. ADC12IE=0X01; //开放中断ADC12IFG.0
  23. ADC12CTL0=ADC12ON+SHT0_4+REFON+REF2_5V;//打开ADC转换的核,采用内部参考电压2.5v;
  24. ADC12CTL1=SHP; //信号源内部触发
  25. ADC12CTL0 |=ENC; //开放使能
  26. _EINT();//开放系统总中断
  27. ADC12CTL0 |=ADC12SC; //开始转换,转换完成之后自动进入中断服务子程序

  28. }


  29. #pragma vector=ADC_VECTOR
  30. __interrupt void ADC12ISR(){
  31. data=ADC12MEM0*2.5/4095; //data为全局变量
  32. }
  33. //基本写入函数命令
  34. void Lcd_InsWrite(unsigned int i,char Instruction)
  35. {
  36. P4DIR=0XFF; // P4口设置成输出模式
  37. if(i==0)
  38. P3OUT=0x1F; // RS=0,R/W=0 写指令
  39. else P3OUT=0x9F; // RS=0,R/W=0 写数据
  40. P3OUT|=BIT5; //E=1 使能
  41. P4OUT=Instruction; //功能设定
  42. delay(3); //延时
  43. P3OUT&=~BIT5; //E=0:下降沿锁存数据
  44. }

  45. //LCD初始化函数
  46. //函数声明:采用MSP430端口p3.5-3.7连接LCD的E,RW,和RS端口;P4口用来传送数据
  47. void init_lcd(void)
  48. {
  49. P3DIR=0XE0; //P3.5-E,P3.6-R/W,P3.7-RS输出
  50. Lcd_InsWrite(0,0x38);//8位数据端口,2行显示,5*7点阵
  51. delay(400);
  52. Lcd_InsWrite(0,0x0c);//开启显示, 无光标
  53. delay(400);
  54. Lcd_InsWrite(0,0x06);//AC递增, 画面不动
  55. delay(400);
  56. Lcd_InsWrite(0,0x01);//清屏
  57. delay(400);
  58. }


  59. //将ADC转换后的值写入LCD
  60. void WriteData(){
  61. data*=100;
  62. int temp=(int)data;
  63. a=temp/100;//考虑到由于内部参考电压的限制,且仅考虑两位小数的情况
  64. b=(temp%100)/10;
  65. c=(temp%10);
  66. Lcd_InsWrite(1,a+0x30);
  67. Lcd_InsWrite(1,'.');
  68. Lcd_InsWrite(1,b+0x30);
  69. Lcd_InsWrite(1,c+0x30);
  70. }

  71. //主函数部分
  72. void main(){
  73. WDTCTL=WDTPW+WDTHOLD;//关闭看门狗
  74. initClock();//初始化时钟
  75. initADC12();//ADC12采样初始化,并打开中断子程序计算采样值的大小
  76. init_lcd(); //lcd初始化
  77. Lcd_InsWrite(0,0x80); //显示在第一行
  78. WriteData(); //将采样值分别计算出对应位的输出
  79. }

复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:50606 发表于 2013-5-28 16:11 | 只看该作者
不懂,但是还是要顶,安抚楼主受伤心灵,每一个新手都是痛苦的开始,快乐的结局
回复

使用道具 举报

板凳
ID:1 发表于 2013-5-29 00:50 | 只看该作者
你的12864 显示黑色的格子吗?如果不显示的话可能是屏的对比度没有调好 我以前就遇到过这样的问题,先要把格子调出来
回复

使用道具 举报

地板
ID:76287 发表于 2015-4-7 18:59 | 只看该作者
oid main(){  WDTCTL=WDTPW+WDTHOLD;//关闭看门狗 initClock();//初始化时钟 initADC12();//ADC12采样初始化,并打开中断子程序计算采样值的大小 init_lcd(); //lcd初始化 Lcd_InsWrite(0,0x80); //显示在第一行 WriteData(); //将采样值分别计算出对应位的输出
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表