1602无法显示(对比度正常)

2019-03-24 21:04发布

以下是我的程序,编译连接能通过,也能生成hex文件,就是不能显示,不知道是什么问题。望高手求救!
/**************************************************************************************
file name           : 1602.C
Chip type              : ATmega16
Program type        : Application
Clock frequency   : 12.000000 MHz
Declare                :     PB口做八位数据; PD口的4,5,6位分别为RS,RW,EN的接口.
***************************************************************************************/
#include <iom16v.h>
#include <macros.h>
#include "delay.h"
#define uint    unsigned int
#defien uchar unsigned char
//子程序声明部分
void chushihua();                                                                // 初始化子程序
void write_cmd(uchar cmd);                                              //写指令子程序
void write_data(ucahr data);                                              //写数据子程序
void SetCursor(uchar x, uchar y);         //设置显示地址
void PutChar(uchar x,uchar y,uchar data);                       //写一个字符
void PutStr(uchar x,uchar y,flash uchar *s);      //写一个字符串
void PutNum(uchar x,uchar y,uint intdata);                     //写无字符型整形数 //主程序
void main()
{
   chushihua();
   PutChar(x,y,' ');
   PutStr(x,y," ");
   PutNum(x,y,);
   while(1);
}
void chushihua()
{
      DDRB=0XFF;                                      // PB口做八位数据
      DDRD|=BIT(4)|BIT(5)|BIT(6);              // PD口的4,5,6位分别为RS,RW,EN的接口
      PORTD&=~BIT(6);                            //EN=0
      write_cmd(0X38);                             //置功能位,8位两行5*7显示
      delay(5);
      write_cmd(0X01);                            //清屏
      delay(5);
      write_cmd(0X0c);                          //关闭光标显示,若为0x0f,则为光标闪烁显示;
      delay(5);
      write_cmd(0X06);                          //置地址增方式,整体移位的输入方式
      delay(5);
}
 //写指令子程序
void wirte_cmd(uchar cmd)                 
{
    PROTD&=~BIT(4);                   //RS=1
    PROTD&=~BIT(5);                   //RW=0
    PROTB=cmd;                            //输出命令
    delay(1);
    PROTD|=BIT(6);                       //EN=1,开始写命令
    delay(1);
    PROTD&=~BIT(6);
}
 //写数据子程序
void write_data(uchar data)          
{
    PROTD&=~BIT(4);
    PROTD&=~BIT(5);
    PROTB=data;                          //输出数据
    delay(1);
    PROTD|=BIT(6);                     //EN=1,开始写数据
    delay(1);
    PROTD&=~BIT(6);                //EN=0
}
//设置显示地址:X为横轴(0-15),Y为纵轴(0-1)
void SetCursor(uchar x,uchar y)
{
   uchar address;
   x&=0x0f;
  if(y==0)
    address=0x80+x;
  else
    address=0xc0+x;
  write_cmd(address);
}
void PutChar(uchar x,uchar y,uchar data)
{
    SetCursor();
    write_data(data);
}
//写一个字符串:X为横轴(0-15),Y为纵轴(0-1)
void PutStr(uchar x,uchar y,flash uchar *s)
{
    SetCursor();
    while(*s)
    {
       write_data(*s);
       delay(5);
    }
}  
//写一个无字符整数:X为横轴(0-15),Y为纵轴(0-1)
void PutNum(uchar x,uchar y,uint intdata)
{
 uchar i=0,temp[5];
 while(num/10 || num%10) 
 {
   temp=num%10;
   num/=10;
   i++;  
 }
 SetCursor(x,y);
 while(i) 
 {
   i--;
   write_data(temp+0x30);
 }
}                    
  此帖出自小平头技术问答
0条回答

一周热门 更多>