找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1687|回复: 0
收起左侧

AD转换显示在12864

[复制链接]
ID:244451 发表于 2017-10-31 09:36 | 显示全部楼层 |阅读模式
基于MEGA128
12864是ST7920驱动

回复

使用道具 举报

ID:244451 发表于 2017-10-31 09:38
  1. #include <iom128v.h>
  2. #include <string.h>
  3. #include <macros.h>
  4. #define uchar unsigned char
  5. #define uint unsigned int

  6. #define RS (1<<0)
  7. #define RW (1<<1)
  8. #define EN (1<<2)

  9. //延时函数
  10. void s_ms(uint ms)
  11. {
  12.         for(;ms>1;ms--);
  13. }       
  14. //字符串
  15. char Result[]={"RV2 :       "};
  16. char Result_1[]={"西安理工大学"};
  17. //写数据
  18. void WriteDataLCM(unsigned char WDLCM)
  19. {
  20.         //ReadStatusLCM(); //检测忙
  21.         s_ms(100);
  22.         PORTC|=RS;       //RS=1   
  23.         s_ms(100);
  24.         PORTC&=~RW;      //RW=0
  25.         s_ms(100);
  26.         PORTC|=EN;       //EN=1
  27.         s_ms(100);
  28.         PORTA=WDLCM;     //输出数据
  29.         s_ms(100);
  30.         PORTC&=~EN;      //EN=0
  31.         s_ms(100);
  32. }

  33. //写指令
  34. void WriteCommandLCM(unsigned char WCLCM)
  35. {
  36.         //ReadStatusLCM(); //根据需要检测忙
  37.         s_ms(100);
  38.         PORTC&=~RS;      //RS=0
  39.         s_ms(100);
  40.         PORTC&=~RW;      //RW=0
  41.         s_ms(100);
  42.         PORTC|=EN;       //EN=1
  43.         s_ms(100);
  44.         PORTA=WCLCM;     //输出指令
  45.         s_ms(100);
  46.         PORTC&=~EN;      //EN=0
  47.         s_ms(100);
  48. }

  49. //读状态:检测忙
  50. void ReadStatusLCM(void)
  51. {
  52.         uchar temp;
  53.     uchar flag = 1;
  54.     while(flag==1)
  55.         {
  56.             DDRA=0x00;      //端口B改为输入
  57.                 PORTA=0xff;   
  58.                 s_ms(100);
  59.                 PORTC&=~RS;     //RS=0
  60.                 s_ms(100);
  61.                 PORTC|=RW;      //RW=1
  62.                 s_ms(100);
  63.                 PORTC|=EN;      //EN=1
  64.                 s_ms(1000);
  65.                 temp = PINA;    //读端口B
  66.                 s_ms(1000);
  67.                 DDRA=0xff;      //端口B改为
  68.                 s_ms(100);
  69.                 PORTC&=~EN;     //EN=0
  70.                 s_ms(100);
  71.                 if(temp>>7==0)
  72.                 flag = 0;
  73.         }
  74. }

  75. //LCM初始化
  76. void LCMInit(void)
  77. {
  78.         WriteCommandLCM(0x38);    //三次显示模式设置,不检测忙信号
  79.         s_ms(1000);
  80.         WriteCommandLCM(0x38);
  81.         s_ms(1000);
  82.         WriteCommandLCM(0x38);
  83.         s_ms(1000);
  84.         WriteCommandLCM(0x38);    //显示模式设置,开始要求每次检测忙信号
  85.         WriteCommandLCM(0x08);    //关闭显示
  86.         WriteCommandLCM(0x01);    //显示清屏
  87.         WriteCommandLCM(0x06);    //显示光标移动设置
  88.         WriteCommandLCM(0x0C);    //显示开及光标设置
  89. }





  90. void DisplayList(unsigned char X,char *DData)
  91. {
  92.         unsigned char length;
  93.         unsigned char i=0;
  94.         char *p;
  95.         p = DData;
  96.         length = strlen(p);
  97.         WriteCommandLCM(0x08);
  98.         WriteCommandLCM(X);
  99.         WriteCommandLCM(0x06);
  100.         WriteCommandLCM(0x0C);
  101.         WriteCommandLCM(X);
  102.         for(i=0;i<length;i++)
  103.         {
  104.                 WriteDataLCM(DData[i]);
  105.                 i++;
  106.                 WriteDataLCM(DData[i]);
  107.         }
  108. }
  109. unsigned int mega128_ad()
  110. {
  111.       unsigned int addata,haha;
  112.          DDRF|=BIT(PF1);
  113.          PORTF|=BIT(PF1);
  114.          ADMUX=0;//参考电压选择
  115.          ADCSRA=0X80;//ADC使能
  116.          ADCSRA|=BIT(ADSC);//开始转换
  117.          while(!(ADCSRA&(BIT(ADIF))));//ADIF中断标志
  118.      addata=ADCL;
  119.          addata=addata+ADCH*256;
  120.          return addata;
  121. }   
  122. void zifuchuan()
  123.    {
  124.    uchar data;
  125.    if(data>1000)
  126.         {
  127.         Result[6]=data/1000+'0';
  128.     Result[7]=data/100%10+'0';
  129.     Result[8]=data/10%10+'0';
  130.     Result[9]=data%10+'0';
  131.     Result[10]=0;
  132.         }
  133.         else if(data>100)
  134.         {
  135.         Result[6]=data/100+'0';
  136.     Result[7]=data/10%10+'0';
  137.     Result[8]=data%10+'0';
  138.     Result[9]=0;
  139.     Result[10]=0;
  140.         }
  141.         else if(data>10)
  142.         {
  143.         Result[6]=data/10%10+'0';
  144.     Result[7]=data%10+'0';
  145.     Result[8]=0;
  146.     Result[9]=0;
  147.     Result[10]=0;
  148.   }
  149.   else
  150.   {
  151.     Result[6]=data%10+'0';
  152.     Result[7]=0;
  153.     Result[8]=0;
  154.     Result[9]=0;
  155.     Result[10]=0;
  156.   }
  157. }
  158.        
  159. //主函数
  160. void main(void)
  161. {
  162.     uchar haha;//端口初始化
  163.         DDRA=0xff;
  164.         PORTA=0xff;
  165.         DDRC=0xff;
  166.         PORTC=0xff;
  167.         DDRD=0xff;
  168.         PORTD=0x00;
  169.         DDRF=0x00;
  170.         PORTF=0xff;
  171.        
  172.         s_ms(200);
  173.         s_ms(200);  
  174.         LCMInit(); //LCM初始化   //液晶初始化
  175.     while(1)
  176.         {
  177.         haha=mega128_ad();
  178.         zifuchuan(haha);
  179.     DisplayList(0x80,Result);
  180.         DisplayList(0x9a,Result_1);
  181.         s_ms(2000);
  182.         }     
  183. }
复制代码

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

本版积分规则

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

Powered by 单片机教程网

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