找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1086|回复: 2
收起左侧

这个LcdShowDat为什么没有调用呀,搞不懂呀

[复制链接]
ID:453409 发表于 2018-12-24 15:13 | 显示全部楼层 |阅读模式
void delay_ms(unsigned int d);
void ScanKeyboard();
void LcdShowStr(unsigned char x,unsigned char y,unsigned char*str);
void LcdShowDat(unsigned char x,unsigned char y,unsigned char dat);
unsigned char cnt=0,w=0,key=0;
unsigned char code KeyCode[]=
{0xe7,0xd7,0xb7,0x77,0xeb,0xdb,0xbb,0x7b,0xed,0xdd,0xdb,0xbd,0x7d,0xee,0xde,0xbe,0x7e};
void main()
{       
        unsigned char temp;
        unsigned char str[]="hello";
        TMOD=0X01;
        TH0=0X4C;
        TL0=0X00;
        IE=0X82;
        TR0=1;
        InitLcd1602();
        LcdShowStr(2,0,str);
        while(1);
        {
        temp=w;
        LcdShowDat(4,1,temp);
        }
}
void LcdWaitReady()
{
        unsigned char sta;
        LCD1602_DB=0XFF;
        LCD1602_RS=0;
        LCD1602_RW=1;
        do{
                LCD1602_E=1;
                sta=LCD1602_DB;
                LCD1602_E=0;
        }
        while(sta&0x80);
}
void LcdWriteCmd(unsigned char cmd)
{
        LcdWaitReady();
        LCD1602_RS=0;
        LCD1602_RW=0;
        LCD1602_DB=cmd;
        LCD1602_E=1;
        LCD1602_E=0;
}
void LcdWriteDat(unsigned char dat)
{
        LcdWaitReady();
        LCD1602_RS=1;
        LCD1602_RW=0;
        LCD1602_DB=dat;
        LCD1602_E=1;
        LCD1602_E=0;
}
void LcdSetCursor(unsigned char x,unsigned char y)
{
        unsigned char addr;
        if(y==0)
        addr=0x00+x;
        else
        addr=0x40+x;
        LcdWriteCmd(addr|0x80);
}
void LcdShowStr(unsigned char x,unsigned char y,unsigned char*str)
{
        LcdSetCursor(x,y);
        while(*str!='\0')
        {
                LcdWriteDat(*str++);
        }
}
void LcdShowDat(unsigned char x,unsigned char y,unsigned char dat)
{
        LcdSetCursor(x,y);
        LcdWriteDat(dat);
}
void InitLcd1602()
{
        LcdWriteCmd(0x38);
        LcdWriteCmd(0x0c);
        LcdWriteCmd(0x06);
        LcdWriteCmd(0x01);
}
void ScanKeyboard()
{
        unsigned char scan1,scan2,keyboard;
        unsigned char i;
        P2=0xf0;
        scan1=P2;
        if((scan1&0xf0)!=0xf0)
        {
                delay_ms(10);
                scan1=P2;
                if((scan1&0xf0)!=0xf0)
                {
                        P2=0xf0;
                        scan2=P2;
                        keyboard=scan1|scan2;
                        while((P2&0x0f)!=0x0f)
                        for(i=0;i<=15;i++)
                        {
                                if(keyboard==KeyCode[i])
                                key=i;
                        }
                }
        }
}
void clock()interrupt 1
{
        unsigned char key,i;
        cnt++;
        TH0=0X4C;
        TL0=0X00;
        ScanKeyboard();
        if(key==1)
        {
                w=0x20;
        }
        if(key==2)
        {
                for(i=0;cnt<=20;i++)
                {
                 w=0x61+0x01;
                 if(i==3)
                 {
                         i=0;
                         w=0x61;
                 }
                }
        }
}
void delay_ms(unsigned int d)
{
        unsigned char i;
        while(d--)
        {                                                                                                                                       
                for(i=0;i<=110;i++);
        }
}
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?_LCDSHOWDAT?ABC

回复

使用道具 举报

ID:451718 发表于 2018-12-24 17:52 | 显示全部楼层
主程序最后一个语句不是么?
另外,你这个程序能跑起来么? 真的有点佩服。建议你还是先初步了解一下单片机的教程,你框架结构有很大的问题。  中断里面处理了太多事,还没有等中断恢复,第二次中断就该响应了。
回复

使用道具 举报

ID:453692 发表于 2018-12-24 17:54 | 显示全部楼层
子程序调用函数是不是有问题,是不是涉及到是否修改数值问题。三种传值方式
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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