找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机光敏程序1602上面显示不了(几条横杠)

[复制链接]
跳转到指定楼层
楼主
ID:479896 发表于 2019-3-10 23:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面的是我的程序   我用的是普中开发板
      做的是光敏  在1602上显示
   但是我在数码管上面能正常显示 但是在  1602上面显示不了(显示的是几条横杠)     我是个新手    我也不知道怎么办了   求大佬帮助
       我是用的ad芯片是xpt2046                  求大佬帮助           


#include <REGX51.H>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit lcd_rw=P2^5;
sbit lcd_rs=P2^6;
sbit lcd_en=P2^7;
sbit DOUT = P3^7;          //输出
sbit CLK  = P3^6;          //时钟
sbit DIN  = P3^4;          //输入
sbit CS   = P3^5;          //片选
uint wan,qian,bai,shi,ge;
uint temp;
uchar data disdata[5];
uint k;        //对读取数据加限制  让他有时间的读取
//uchar code table[]={0,1,2,3,4,5,6,7,8,9};


    void delay1ms(uint ms)//延时1毫秒(不够精确的)
{
uint i,j;
    for(i=0;i<ms;i++)
    for(j=0;j<100;j++);
}                                


void write_com(unsigned char com)//写指令//
{  delay1ms(1);
   lcd_rs=0;
   lcd_rw=0;
   lcd_en=0;
   P0=com;
   delay1ms(1);
   lcd_en=1;
   delay1ms(1);
   lcd_en=0;
  }
void write_dat(unsigned char dat)//写数据//
{  delay1ms(1);;
   lcd_rs=1;
   lcd_rw=0;
   lcd_en=0;
   P0=dat;
   delay1ms(1);
   lcd_en=1;
   delay1ms(1);
   lcd_en=0;
}
void lcd_init()//初始化设置//
{
  write_com(0x38);delay1ms(5);
  write_com(0x08);delay1ms(5);
  write_com(0x01);delay1ms(5);
  write_com(0x06);delay1ms(5);
  write_com(0x0c);delay1ms(5);
}
   /****************************************************************************
*函数名:TSPI_Start
*输  入:无
*输  出:无
*功  能:初始化触摸SPI
***************************************************************************/

void init()
{
        CLK = 0;
        CS  = 1;
        DIN = 1;
        CLK = 1;
        CS  = 0;               
}        /*************************lcd1602程序**************************/
/****************************************************************************
*函数名:SPI_Write
*输  入:dat:写入数据
*输  出:无
*功  能:使用SPI写入数据
****************************************************************************/

void SPI_Write(uchar dat)
{
        uchar i;
        CLK = 0;
        for(i=0; i<8; i++)
        {
                DIN = dat >> 7;          //放置最高位
                dat <<= 1;
                CLK = 0;                        //上升沿放置数据

                CLK = 1;

        }
}
/****************************************************************************
*函数名:SPI_Read
*输  入:无
*输  出:dat:读取 到的数据
*功  能:使用SPI读取数据
****************************************************************************/

uint SPI_Read(void)
{
        uint i, dat=0;
        CLK = 0;
        for(i=0; i<12; i++)                //接收12位数据
        {
                dat <<= 1;

                CLK = 1;
                CLK = 0;

                dat |= DOUT;

        }
        return dat;        
}

/****************************************************************************
*函数名:Read_AD_Data
*输  入:cmd:读取的X或者Y
*输  出:endValue:最终信号处理后返回的值
*功  能:读取触摸数据
****************************************************************************/
uint Read_AD_Data(uchar cmd)
{
        uchar i;
        uint AD_Value;
        CLK = 0;
        CS  = 0;
        SPI_Write(cmd);
        for(i=6; i>0; i--);         //延时等待转换结果
        CLK = 1;          //发送一个时钟周期,清除BUSY
        _nop_();
        _nop_();
        CLK = 0;
        _nop_();
        _nop_();
        AD_Value=SPI_Read();
        CS = 1;
        return AD_Value;        
}
/*******************************************************************************
* 函数名         :datapros()
* 函数功能                 :数据处理函数
* 输入           : 无
* 输出                  : 无
*******************************************************************************/
void datapros()
{                      if(k==15)
        {   k=0;
                temp = Read_AD_Data(0xa4);                //   AIN2 光敏电阻        
                }
                k++;
        
}
/*******************************************************************************
* 函数名         :DigDisplay()
* 函数功能                 :数码管显示函数
* 输入           : 无
* 输出                  : 无
*******************************************************************************

void DigDisplay()
{
      P2=0xf3;
   P0=table[wan];
   delay1(2);   
   P2=0xef;
   P0=table[qian];
   delay1(2);
   P2=0xeb;
   P0=table[bai];
   delay1(2);
   P2=0xc7;
   P0=table[shi];
   delay1(2);
   P2=0xa3;
   P0=table[ge];
   delay1(2);

}
/***************************/
void   guangmin()
{                   wan=temp/10000;
       qian=(temp/1000)%10;                                                                          
           bai=(temp%1000)/100;
       shi=temp%100/10;
       ge=temp%10;
       write_com(0x80+0x40+0x01);
           write_dat(wan);//显示万位
           write_com(0x80+0x40+0x02);
           write_dat(qian);//显示千位         
           write_com(0x80+0x40+0x03);
           write_dat(bai);//显示百位         
           write_com(0x80+0x40+0x04);
           write_dat(shi);//显示十数点         
             write_com(0x80+0x40+0x05);
           write_dat(ge);//显示个数点
           }        
/*******************************************************************************
* 函 数 名       : main
*******************************************************************************/
void main()
{                 init();        
      lcd_init();
        while(1)
        {
      datapros();         //数据处理函数
                                //        DigDisplay();
        guangmin();
        }               
}


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

使用道具 举报

沙发
ID:475444 发表于 2019-3-11 06:45 | 只看该作者
看视频,看别人怎么写的,取值是怎么取的,规格书也不看看

评分

参与人数 1黑币 +8 收起 理由
struct00 + 8 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:164602 发表于 2019-3-11 08:34 | 只看该作者
很简单啊。
你说数码管显示正常,就知道你的问题了。
1602显示与数码管显示的字符编码不一样哦,这是很基础的知识。看到你的程序,就知道你不知道这个,好好学习一下。
只要这四句改一下下,就好了。
guangmin()函数中的四句:
           write_dat(wan+0x30);//显示万位
           write_dat(qian+0x30);//显示千位         
           write_dat(bai+0x30);//显示百位         
           write_dat(shi+0x30);//显示十数点         
           write_dat(ge+0x30);//显示个数点

我已经在我的板子上通过了的。万千都没用,最大不超过500
回复

使用道具 举报

地板
ID:479896 发表于 2019-3-11 12:05 | 只看该作者
嗯,谢谢帮助    我要好好学习了
回复

使用道具 举报

5#
ID:479896 发表于 2019-3-11 12:45 | 只看该作者
HC6800-ES-V2.0 发表于 2019-3-11 08:34
很简单啊。
你说数码管显示正常,就知道你的问题了。
1602显示与数码管显示的字符编码不一样哦,这是很基 ...

谢谢
回复

使用道具 举报

6#
ID:731755 发表于 2022-3-31 07:54 来自手机 | 只看该作者
HC6800-ES-V2.0 发表于 2019-3-11 08:34
很简单啊。
你说数码管显示正常,就知道你的问题了。
1602显示与数码管显示的字符编码不一样哦,这是很基 ...

感谢,我的程序也有此问题,不过老师说不能超过500.我就知道是我的程序哪里的问题了。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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