3712|10

142

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

按键加一问题 [复制链接]

while(1)
               
        if(key1==0)
                {
                 delay_ms(1);
                        if(key1==0)
                        {
                                while(!key1);
                                k++;
                        }
                }
                        if(key2==0)
                {
                 delay_ms(1);
                        if(key2==0)
                        {
                                while(!key2);
                                k--;
                        }
                }
                switch(k)
        {
                case 1:display1();break;
                case 2:display2();break;
                case 3:display3();break;
        }

此帖出自51单片机论坛

最新回复

大神的意思是用状态机的思想   详情 回复 发表于 2020-3-25 12:41
点赞 关注
 

回复
举报

142

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
在做12864液晶屏翻页,想按一下k1翻到上一页,按k2翻到下一页,这样怎么实现不了
此帖出自51单片机论坛
 
 
 

回复

142

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
按键k1k2控制k的大小,k等于几就翻到第几页
此帖出自51单片机论坛
 
 
 

回复

142

帖子

0

TA的资源

一粒金砂(中级)

4
 
不知道为什么不能实现
此帖出自51单片机论坛
 
 
 

回复

142

帖子

0

TA的资源

一粒金砂(中级)

5
 
#include
#include
#define uchar unsigned char
#define uint unsigned int
#include "4.h"

uchar  table []="       4.c      ";                //oo×ÖÕ¼óÃ2×Ö½ú
uchar  table1[]="    asdasdas    ";
uchar  table2[]="    SDASDSDD    ";  
uchar  table3[]="    ò»¶tèyËÄ    ";
uchar k;
uchar key1num,key2num;
sbit LCD_SID=P0^6;
sbit LCD_SCLK=P0^5;

sbit key1=P1^1;
sbit key2=P1^3;

void delay_ms(uint z)
{
   uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}
void sendbyte(unsigned char bbyte) //·¢Ëíò»¸ö×Ö½ú
{
unsigned char i;
for(i=0;i<8;i++)
   {
   LCD_SID=bbyte&0x80; //è¡3ö×î¸ßλ
   LCD_SCLK=1;
   LCD_SCLK=0;
   bbyte<<=1; //×óòÆ
   }  
}

void write(bit start, unsigned char ddata) //D′Ö¸áî»òêy¾Y
{
  unsigned char start_data,Hdata,Ldata;
  if(start==0)
    start_data=0xf8;  //D′Ö¸áî
  else      
        start_data=0xfa;  //D′êy¾Y

  Hdata=ddata&0xf0;    //衸ßËÄλ
  Ldata=(ddata<<4)&0xf0;  //è¡μíËÄλ
  sendbyte(start_data);   //·¢ËíÆeê¼DÅoÅ
  delay_ms(1); //Ñóê±
  sendbyte(Hdata);       //·¢Ëí¸ßËÄλ
  delay_ms(1);
  sendbyte(Ldata);    //·¢ËíμíËÄλ
  delay_ms(1);
}
/***********ò»DDÏÔê¾8¸öoo×Ö***********
***************oo×ÖÏÔê¾***************
***XÎaDDYÎaáD,KÎa×Öμĸöêy,*PÎaêy×é*
*************************************/
void chinese(uchar x,uchar y,uchar k,uchar *p)
{
        uchar hang,out,i;
        y=y-1;
        switch(x)
        {
                case 1:hang=0x80;break;
                case 2:hang=0x90;break;
                case 3:hang=0x88;break;
                case 4:hang=0x98;break;        
        }
        out=hang+y;        
        write(0,out);
        for(i=0;i              write(1,*p);
                  p++;
                    }
                                //write(1,p);
}
/**********ò»DDÏÔê¾16¸ö×Öĸ***********
***********ó¢ÎÄêy×ÖÏÔê¾***************
***XÎaDDYÎaáD,KÎa×Öμĸöêy,*PÎaêy×é*
*************************************/
void english(uchar x,uchar y,uchar k,uchar *p)
{
        uchar hang,out,i;
        y=y-1;
       
        switch(x)
        {
                case 1:hang=0x80;break;
                case 2:hang=0x90;break;
                case 3:hang=0x88;break;
                case 4:hang=0x98;break;        
        }
        out=hang+y;        
        write(0,out);
        for(i=0;i                  write(1,*p);
                  p++;
                       }                               
       // write(1,p);
}
void lcd_init()
{
        write(0,0x30);  //8λ½éÃæ,»ù±¾Ö¸áî¼ˉ
        write(0,0x0F);  //ÏÔê¾′ò¿a,1a±ê¿a
        write(0,0x01);  //ÇåÆá,½«DDRAMμØÖ·¼ÆêyÆ÷1éáã
        delay_ms(10);
}

void display1()
    {
                        write(0,0x01);
                        english(1,1,15,table);
        english(2,1,15,table);
        english(3,1,15,table);
        english(4,1,15,table);
                                 }
                void display2()
    {
                        write(0,0x01);
                        english(1,1,15,table2);
        english(2,1,15,table2);
        english(3,1,15,table2);
        english(4,1,15,table2);
                                 }
                void display3()
    {
                        write(0,0x01);
                        english(1,1,15,table3);
        english(2,1,15,table3);
        english(3,1,15,table3);
        english(4,1,15,table3);
                                 }
void main()
{  
    lcd_init();
   while(1)
               
        if(key1==0)
                {
                 delay_ms(1);
                        if(key1==0)
                        {
                                while(!key1);
                                k++;
                        }
                }
                        if(key2==0)
                {
                 delay_ms(1);
                        if(key2==0)
                        {
                                while(!key2);
                                k--;
                        }
                }
                switch(k)
        {
                case 1:display1();break;
                case 2:display2();break;
                case 3:display3();break;
        }
                        }


4.c

3.53 KB, 下载次数: 1

此帖出自51单片机论坛
 
 
 

回复

142

帖子

0

TA的资源

一粒金砂(中级)

6
 
大家看看这样可以么
此帖出自51单片机论坛
 
 
 

回复

183

帖子

0

TA的资源

一粒金砂(中级)

7
 
利用不同的key在中断里切换显示页面的内容就行。或者中断里做标志后处理。
此帖出自51单片机论坛

点评

好的,谢谢  详情 回复 发表于 2018-4-27 08:03
 
 
 

回复

142

帖子

0

TA的资源

一粒金砂(中级)

8
 
lovelee 发表于 2018-4-26 16:40
利用不同的key在中断里切换显示页面的内容就行。或者中断里做标志后处理。

好的,谢谢
此帖出自51单片机论坛
 
 
 

回复

3471

帖子

13

TA的资源

五彩晶圆(高级)

9
 
代码写的 不规范。主函数里的while 都不加大括号。这样很容易出问题。多参考一下别人的代码。避免这类问题的出现。
此帖出自51单片机论坛

点评

好的,谢谢,加上可以了  详情 回复 发表于 2018-4-27 17:10
 
 
 

回复

142

帖子

0

TA的资源

一粒金砂(中级)

10
 
ienglgge 发表于 2018-4-27 09:29
代码写的 不规范。主函数里的while 都不加大括号。这样很容易出问题。多参考一下别人的代码。避免这类问题 ...

好的,谢谢,加上可以了
此帖出自51单片机论坛
 
 
 

回复

17

帖子

0

TA的资源

一粒金砂(初级)

11
 
lovelee 发表于 2018-4-26 16:40 利用不同的key在中断里切换显示页面的内容就行。或者中断里做标志后处理。

大神的意思是用状态机的思想

此帖出自51单片机论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表