长汀无线电厂交流论坛

 找回密码
 注册
查看: 6041|回复: 20
打印 上一主题 下一主题

CT_3位LCD屏+2051+实时时钟

  [复制链接]
跳转到指定楼层
楼主
发表于 2011-3-14 10:09:32 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 gw168sh 于 2011-3-14 12:41 编辑

昨天下午没事,把以前写的8952时钟给修改 了一下
用2051+LCD屏+DS1302 做了个时钟
昨天拍了照,忘记把相片弄出来了,
另外请教个问题
编译后16进制的程序有4K,2051只有2kflash rom,是不是写进去的是2进制呀,2进制会小点?
程序如下:
#include <REG52.H>
sbit   LCD_DATA = P1^2;//=14-2051,14脚
sbit   LCD_CLK = P1^3;//=15
sbit   LCD_CS1 = P1^4;//=16
sbit clock_clk=P3^4;//=8
sbit clock_dat=P3^2;//=6
sbit clock_rst=P3^3;//=7
sbit ks5=P3^0;//=2
sbit ks4=P3^1;//=3
sbit keyshi=P3^5;//zhishi=9
sbit keyfen=P3^7;//=11
void init2();
sbit a0 = ACC ^ 0;//为了编程方便定义的位变量
sbit a1 = ACC ^ 1;
sbit a2 = ACC ^ 2;
sbit a3 = ACC ^ 3;
sbit a4 = ACC ^ 4;
sbit a5 = ACC ^ 5;
sbit a6 = ACC ^ 6;
sbit a7 = ACC ^ 7;
unsigned char code digi[]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, 0x77,0x7c,0x58,0x5e,0x79,0x71,0x76,0x37,0x6b,0x6e,0x48};
//0,1,2,3,4,5,6,7,8,9,A,b,c,d,E,F,H,17,18,y,20
unsigned char lcd_data[3],dat, i,set,in,d,e,t,s;   
unsigned int num1;
void delay_ms(unsigned int a)                       
{
        unsigned char i;
        while( --a != 0)
        {               
        for(i = 0; i < 100; i++);         
        }                                   
}
void LCD_init(void)
  {
        LCD_CS1=0;
        LCD_DATA=0;
        LCD_CLK=0;
        LCD_CS1=1;
        delay_ms(100);
        LCD_CLK=1;
}
void LCD_write_char(unsigned char dat)
  {      
        unsigned int i;
        for(i=8;i>0;i--)
          {
            LCD_DATA=0;
                if (dat&0x01)  LCD_DATA=1;
                LCD_CLK=0;
                delay_ms(3);
                LCD_CLK=1;
                delay_ms(3);        
                dat=dat >> 1;
   
          }
}
void LCD_LED_ON(void)
  {
         LCD_CS1=0;
         LCD_write_char(0x05);    // 背光ON
         LCD_CS1=1;
         delay_ms(3);
}
void LCD_OFF(void)
{
   LCD_CS1=0;
         LCD_write_char(0x01);    // 关显示
         LCD_CS1=1;
         delay_ms(3);

}
/**************读出一个字节,时序***************/
unsigned char clock_read(void)   //读出一个字节,时序
{
clock_clk=1; clock_clk=0; a0=clock_dat;
clock_clk=1; clock_clk=0; a1=clock_dat;
clock_clk=1; clock_clk=0; a2=clock_dat;
clock_clk=1; clock_clk=0; a3=clock_dat;
clock_clk=1; clock_clk=0; a4=clock_dat;
clock_clk=1; clock_clk=0; a5=clock_dat;
clock_clk=1; clock_clk=0; a6=clock_dat;
clock_clk=1; clock_clk=0; a7=clock_dat;
return(ACC);
}
/****************************************************
ds1302程序
写入一个字节,
****************************************************/
void clock_write(unsigned char dd)   //写入一个字节,DS1302时序
{
ACC=dd;
clock_clk=0;clock_dat=a0; clock_clk=1;
clock_clk=0;clock_dat=a1; clock_clk=1;
clock_clk=0;clock_dat=a2; clock_clk=1;
clock_clk=0;clock_dat=a3; clock_clk=1;
clock_clk=0;clock_dat=a4; clock_clk=1;
clock_clk=0;clock_dat=a5; clock_clk=1;
clock_clk=0;clock_dat=a6; clock_clk=1;
clock_clk=0;clock_dat=a7; clock_clk=1;
}
/******************** 向reg2写入date数据*/
void write_clock(unsigned char reg2, unsigned char date)//向reg2写入date数据
{
clock_clk=0;
clock_rst=0;
clock_rst=1;
clock_write(reg2);
clock_write(date);
clock_rst=0;
}
/****从reg1寄存器读数据***/
unsigned char read_clock(unsigned char reg1)//从reg1寄存器读数据
{
unsigned char dd=0;
clock_clk=0;
clock_rst=0;
clock_rst=1;
clock_write(reg1);
dd=clock_read();
clock_rst=0;
return(dd);
}
void display_lcd1(unsigned int num)        //显示
{
        lcd_data[0] = digi[num%10];
        lcd_data[1] = digi[(num%100)/10];
        lcd_data[2] = 0x40;
        LCD_CS1=0;
        LCD_write_char(0x08);        //写数据
        for(i=0;i<3;i++) LCD_write_char(lcd_data);
        LCD_CS1=1;
        delay_ms(3);
}
void display_lcd2(unsigned int num)        //显示
{
        lcd_data[0] = 0x40;
        lcd_data[1] = digi[num%10];
        lcd_data[2] = digi[(num%100)/10];
        LCD_CS1=0;
        LCD_write_char(0x08);        //写数据
        for(i=0;i<3;i++) LCD_write_char(lcd_data);
        LCD_CS1=1;
        delay_ms(3);
}
void key()
{
if(ks5==0)
  {
  delay_ms(30);
  if(ks5==0)
   {
   while(ks5==0);
   set++;
   if(set==1) {keyfen=0;keyshi=1;}
   if(set==2) {keyfen=1;keyshi=0;}
   if(set==3)
    {set=0;
     keyfen=1;
    keyshi=1;
    }
   
   }
  }


switch(set)
  {
  case 1:
            d=read_clock(0x83);//读分钟
   e=d;
   d=d>>4;
   e=e&0x0f;
   t=(d*10)+e;
      display_lcd1(t);
   if(ks4==0)
   {
   delay_ms(30);
   if(ks4==0)
    {
   while(ks4==0);
   write_clock(0x8e,0x0);//取消写保护
   write_clock(0x80,0x80);//停止时钟
   d=read_clock(0x83);
   if(d==0x09) {d=0x0f;}//d=9  d=15
   if(d==0x19){d=0x1f;}//d=
   if(d==0x29){d=0x2f;}
   if(d==0x39){d=0x3f;}
   if(d==0x49){d=0x4f;}
   
    d++;
    if(d==0x5a){d=0x00;}
   write_clock(0x82,d);//  写分钟
   write_clock(0x80,0x01);//启动时钟
   write_clock(0x8e,0x80);//写保护
    delay_ms(20);
   //d=0;
  
    }
   }
   //else     
            break;
  case 2:
            d=read_clock(0x85);//读小时
   e=d;
   d=d>>4;
   e=e&0x0f;
   t=(d*10)+e;
   display_lcd2(t);
   if(ks4==0)
   {
   delay_ms(30);
   if(ks4==0)
    {
   while(ks4==0);
   write_clock(0x8e,0x0);//取消写保护
   write_clock(0x80,0x80);//停止时钟
   d=read_clock(0x85);
   if(d==0x09) {d=0x0f;}//d=9  d=15
   if(d==0x19){d=0x1f;}//d=
   d++;
   if(d==0x24){d=0x00;}
   
   write_clock(0x84,d);// 写小时
   write_clock(0x80,0x01);//启动时钟
   write_clock(0x8e,0x80);//写保护
    delay_ms(30);
    }
   }
   //else
            break;
  }
}


/////////////////////////
void show(void)//显示和闪烁函数
{
//unsigned char d,e,t;
//d=read_clock(0x81);//读秒

/**P0 = Tab_Num[ d ];//秒十位
wei2=1;
delay(250);
wei2=0;
P0 = Tab_Num[ e ];//秒各位
wei1=1;
delay(250);
wei1=0;   */
  
      
d=read_clock(0x83);//读分钟
e=d;
d=d>>4;
e=e&0x0f;
t=(d*10)+e;
    display_lcd1(t);
delay_ms(1000);
d=read_clock(0x85);//读小时
e=d;
d=d>>4;
e=e&0x0f;
t=(d*10)+e;
display_lcd2(t);
delay_ms(1000);
// d=read_clock(0x87);//读日
//d=read_clock(0x89);//读月
//    delay_ms(50);
  //d=read_clock(0x8d);//读年
//d=read_clock(0x8b);//读年

}

/*--------------------时钟的初始化---------------------------*/
void Init_1302(void)//如果不满意现在的表,可以初始化调整,写入程序之后,再把初始化屏蔽掉
{
write_clock(0x8e,0x00);//close_protect
delay_ms(30);
write_clock(0x8c,0x08);//year 08年
delay_ms(30);
write_clock(0x88,0x6);//month 06
delay_ms(30);
write_clock(0x86,0x25);//date 25
delay_ms(30);
write_clock(0x84,0x08);//hour  8
delay_ms(30);
write_clock(0x82,0x0a);//minute 40
delay_ms(30);
write_clock(0x80,0x01);//second 41
delay_ms(30);
write_clock(0x8a,0x03);//week_day  3
delay_ms(30);
write_clock(0x90,0xaa);//supply_power
delay_ms(30);
write_clock(0x8e,0x80);//protect
delay_ms(30);
}
void main(void)
{
  set=0;
  ks5=1;
  ks4=1;
        LCD_init();
        LCD_LED_ON();        // 背光ON
    in=0;
   keyshi=1;
  keyfen=1;  
     delay_ms(10);
         
  while(1)
        {   
   LCD_LED_ON();
   //Init_1302();//DS1302寄存器初始化
   key();
   if(set==0)
   {
   show();  
   }
    }  // *** while(1) end ***
}   // *** main() end ***

回复

使用道具 举报

沙发
 楼主| 发表于 2011-3-14 10:16:06 | 只看该作者
其实实时时钟挺好的,加个备用电池,超省电
1302的耗电很少,用的时候打开单片机电源就可以了,2051从1302里面读出来现在的时间。
我打算用电脑的USB供电,上班开电脑就显示,一下班电脑关了,就关机,平时就用备用电池给1302供电

点评

电脑上本来就有时间的,你这不是多此一举吗?  发表于 2012-3-12 22:22
回复 支持 反对

使用道具 举报

板凳
发表于 2011-3-14 11:53:12 | 只看该作者
你是说3位LCD屏吧? 我用3位4寸LED也做过时钟,10 用A显示,11用 11, 12用0,就可以显示12个小时了。
回复 支持 反对

使用道具 举报

地板
 楼主| 发表于 2011-3-14 12:42:33 | 只看该作者
本帖最后由 gw168sh 于 2011-3-14 12:43 编辑
mdy-5153 发表于 2011-3-14 11:53
你是说3位LCD屏吧? 我用3位4寸LED也做过时钟,10 用A显示,11用 11, 12用0,就可以显示12个小时了。


是LCD,这段程序里面还引用了你的部分程序,拼凑的。

我是用24小时显示的,所以不用上午下午
小时和 分钟交替显示的
回复 支持 反对

使用道具 举报

5#
发表于 2011-3-14 21:51:49 | 只看该作者
作得很不错,谢谢分享成果!*^_^*
回复 支持 反对

使用道具 举报

6#
 楼主| 发表于 2011-3-15 08:42:30 | 只看该作者
上图看看


回复 支持 反对

使用道具 举报

7#
发表于 2011-3-16 22:35:01 | 只看该作者
不错,顶一个!
回复 支持 反对

使用道具 举报

8#
发表于 2011-3-22 20:53:41 | 只看该作者
/*
3位LCD字段屏显示时钟,
原程序不全,我把它弄好了,还加了声音、减、背光控制,大家看看还有什么需要的
*/
#include <REG52.H>

sbit           LCD_DATA = P0^0;//=14-2051,14脚
sbit        LCD_CLK = P0^1;//=15
sbit        LCD_CS1 = P0^2;//=16

sbit         clock_clk=P1^4;//=8
sbit         clock_dat=P1^5;//=6
sbit         clock_rst=P2^2;//=7

sbit         ks5=P1^0;//=2  设置位
sbit         ks4=P1^1;//=3  加
sbit         ks3=P1^2;//=3  减
sbit         ks2=P1^3;//=3  背光

sbit    beep=P2^7;//=声音

bit bg=0;
//bit         keyshi=1;//zhishi=9         没有意义
//bit         keyfen=1;//=11

sbit a0 = ACC ^ 0;//为了编程方便定义的位变量
sbit a1 = ACC ^ 1;
sbit a2 = ACC ^ 2;
sbit a3 = ACC ^ 3;
sbit a4 = ACC ^ 4;
sbit a5 = ACC ^ 5;
sbit a6 = ACC ^ 6;
sbit a7 = ACC ^ 7;
unsigned char code digi[]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x58,0x5e,0x79,0x71,0x76,0x37,0x6b,0x6e,0x48,0x40};
//0,   1,         2,         3,          4,   5,   6,   7,   8,   9,   A,   b,   c,   d,   E,   F,   H,   17,  18,  y,   20   -
unsigned char lcd_data[3],dat,set,d,e,t;   

void dealy(unsigned int dealy_time)   //延时子程序
{
        for(;dealy_time>0;dealy_time--)
        {}
}

void Beep()//BELL-扬声器--开机
{
        unsigned char a;//定义变量用于发声的长度设置
//        Led_EA = 1;//关列显示驱动,防止屏幕出现乱码
        for(a=60;a>0;a--)//第一个声音的长度
        {
                beep = ~beep;//取反扬声器驱动口,以产生音频
                dealy(100);//音调设置延时
        }
        for(a=100;a>0;a--)//同上
        {
                beep = ~beep;
                dealy(80);//
        }
        for(a=100;a>0;a--)//同上
        {
                beep = ~beep;
                dealy(30);//
        }
}
//---------------------------------------------------       
void Beep_set()        //BELL -扬声器--按键
{
        unsigned char a;//定义变量用于发声的长度设置
//        Led_EA = 1;//关列显示驱动,防止屏幕出现乱码
        for(a=250;a>0;a--)//第一个声音的长度
        {
                beep = ~beep;//取反扬声器驱动口,以产生音频
                dealy(20);//音调设置延时
        }
        for(a=100;a>0;a--)//同上
        {
                beep = ~beep;
                dealy(80);//
        }
}       

void delay_ms(unsigned int a)                       
{
        unsigned char i;
        while( --a != 0)
        {               
                for(i = 0; i < 100; i++);         
        }                                   
}

void LCD_init(void)
{
        LCD_CS1=0;
        LCD_DATA=0;
        LCD_CLK=0;
        LCD_CS1=1;
        delay_ms(100);
        LCD_CLK=1;
}

void LCD_write_char(unsigned char dat)
{      
        unsigned char i;
        for(i=8;i>0;i--)
        {
                LCD_DATA=0;
                if (dat&0x01)  LCD_DATA=1;
                LCD_CLK=0;
                delay_ms(3);
                LCD_CLK=1;
                delay_ms(3);        
                dat=dat >> 1;   
        }
}
/*
void LCD_on()
{
        LCD_CS1=0;
        LCD_write_char(0x05);    // 背光on  0x05 开
        LCD_CS1=1;
        delay_ms(3);
}

void LCD_off()
{
        LCD_CS1=0;
        LCD_write_char(0x01);    // 背光off         0x04 关
        LCD_CS1=1;
        delay_ms(3);
}
*/
/**************读出一个字节,时序***************/
unsigned char clock_read()   //读出一个字节,时序
{
        clock_clk=1; clock_clk=0; a0=clock_dat;
        clock_clk=1; clock_clk=0; a1=clock_dat;
        clock_clk=1; clock_clk=0; a2=clock_dat;
        clock_clk=1; clock_clk=0; a3=clock_dat;
        clock_clk=1; clock_clk=0; a4=clock_dat;
        clock_clk=1; clock_clk=0; a5=clock_dat;
        clock_clk=1; clock_clk=0; a6=clock_dat;
        clock_clk=1; clock_clk=0; a7=clock_dat;
        return(ACC);
}
/****************************************************
ds1302程序
写入一个字节,
****************************************************/
void clock_write(unsigned char dd)   //写入一个字节,DS1302时序
{
        ACC=dd;
        clock_clk=0 ;clock_dat=a0; clock_clk=1;
        clock_clk=0 ;clock_dat=a1; clock_clk=1;
        clock_clk=0 ;clock_dat=a2; clock_clk=1;
        clock_clk=0 ;clock_dat=a3; clock_clk=1;
        clock_clk=0 ;clock_dat=a4; clock_clk=1;
        clock_clk=0 ;clock_dat=a5; clock_clk=1;
        clock_clk=0 ;clock_dat=a6; clock_clk=1;
        clock_clk=0 ;clock_dat=a7; clock_clk=1;
}
/******************** 向reg2写入date数据  向指定地址写数据 */
void write_clock(unsigned char reg2, unsigned char date)//向reg2写入date数据
{
        clock_clk=0;
        clock_rst=0;
        clock_rst=1;
        clock_write(reg2);
        clock_write(date);
        clock_rst=0;
}
/****从reg1寄存器读数据*     从指定地址读数据 **/
unsigned char read_clock(unsigned char reg1)//从reg1寄存器读数据 ///read_clock        从指定地址读数据           write_clock 向指定地址写数据
{
        unsigned char dd=0;
        clock_clk=0;
        clock_rst=0;
        clock_rst=1;
        clock_write(reg1);
        dd=clock_read();
        clock_rst=0;
        return(dd);
}
/*显示1*/
void display_lcd1(unsigned char num)        //显示 小时        数据拆分
{
        unsigned char i;
        lcd_data[0] = digi[num%10];
        lcd_data[1] = digi[(num%100)/10];
        lcd_data[2] = 0x40;
        LCD_CS1=0;
        LCD_write_char(0x08);        //写数据
        for(i=0;i<3;i++) LCD_write_char(lcd_data[i]);
        LCD_CS1=1;
        delay_ms(3);
}
/*显示2*/
void display_lcd2(unsigned char num)        //显示 分钟         数据拆分
{
        unsigned char i;
        lcd_data[0] = 0x40;
        lcd_data[1] = digi[num%10];
        lcd_data[2] = digi[(num%100)/10];
        LCD_CS1=0;
        LCD_write_char(0x08);        //写数据
        for(i=0;i<3;i++) LCD_write_char(lcd_data[i]);
        LCD_CS1=1;
        delay_ms(3);
}
//键盘  1 设置 2  加  3 减  4背光  成功
void key()
{
        if(ks5==0)
        {
                delay_ms(30);
                if(ks5==0)
                {
                        while(ks5==0);
                        Beep_set();
                        set++;
                        if(set==3) set=0;
                }
        }

        switch(set)
        {
                case 1:
                t=((read_clock(0x83))/16)*10 + (read_clock(0x83))%16;
                display_lcd1(t);
                if(ks4==0)
                {
                        delay_ms(30);
                        if(ks4==0)
                        {
                                while(ks4==0);
                                Beep_set();
                                write_clock(0x8e,0x00);//取消写保护
                                write_clock(0x80,0x80);//停止时钟
                                d=((read_clock(0x83))/16)*10 + (read_clock(0x83))%16;  //16转10
                                d++;
                                if(d==60)d=0;
                                d=d/10*16+d%10;//十进制转换成DS1302要求的DCB码          10转16
                                write_clock(0x82,d);//  写分钟
                                write_clock(0x80,0x00);//启动时钟
                                write_clock(0x8e,0x80);//写保护
                                delay_ms(20);                       
                        }
                }

                if(ks3==0)
                {
                        delay_ms(30);
                        if(ks3==0)
                        {
                                while(ks3==0);
                                Beep_set();
                                write_clock(0x8e,0x00);//取消写保护
                                write_clock(0x80,0x80);//停止时钟
                                d=((read_clock(0x83))/16)*10 + (read_clock(0x83))%16;  //16转10
                                d--;
                                if(d==0)d=59;
                                d=d/10*16+d%10;//十进制转换成DS1302要求的DCB码          10转16
                                write_clock(0x82,d);//  写分钟
                                write_clock(0x80,0x00);//启动时钟
                                write_clock(0x8e,0x80);//写保护
                                delay_ms(20);                       
                        }
                }   
                break;
                case 2:
                t=((read_clock(0x85))/16)*10 + (read_clock(0x85))%16;
                display_lcd2(t);
                if(ks4==0)
                {
                        delay_ms(30);
                        if(ks4==0)
                        {
                                while(ks4==0);
                                Beep_set();
                                write_clock(0x8e,0x00);//取消写保护
                                write_clock(0x80,0x80);//停止时钟
                                d=((read_clock(0x85))/16)*10 + (read_clock(0x85))%16;  //16转10
                                d++;
                                if(d==24)d=0;
                                d=d/10*16+d%10;//十进制转换成DS1302要求的DCB码          10转16
                                write_clock(0x84,d);//  写分钟
                                write_clock(0x80,0x00);//启动时钟
                                write_clock(0x8e,0x80);//写保护
                                delay_ms(20);                       
                        }
                }

                if(ks3==0)
                {
                        delay_ms(30);
                        if(ks3==0)
                        {
                                while(ks3==0);
                                Beep_set();
                                write_clock(0x8e,0x00);//取消写保护
                                write_clock(0x80,0x80);//停止时钟
                                d=((read_clock(0x85))/16)*10 + (read_clock(0x85))%16;  //16转10
                                d--;
                                if(d==0)d=23;
                                d=d/10*16+d%10;//十进制转换成DS1302要求的DCB码          10转16
                                write_clock(0x84,d);//  写分钟
                                write_clock(0x80,0x00);//启动时钟
                                write_clock(0x8e,0x80);//写保护
                                delay_ms(20);                       
                        }
                }
                break;
        }
        //*背光控制
        if(ks2==0)
        {
                delay_ms(30);
                if(ks2==0)
                {
                        while(ks2==0);
                        Beep_set();
                        bg=~bg;
                        if(bg==0)
                        {
                                LCD_CS1=0;
                                LCD_write_char(0x04);    // 背光off        原=0x01
                                LCD_CS1=1;
                                delay_ms(3);                
                        }
                        else
                        {
                                LCD_CS1=0;
                                LCD_write_char(0x05);    // 背光on         
                                LCD_CS1=1;
                                delay_ms(3);
                        }
                }
        }          
}

void show()//显示和闪烁函数
{
        e=((read_clock(0x83))/16)*10 + (read_clock(0x83))%16;
        display_lcd1(e);   //显示分钟
        delay_ms(1000);

        e=((read_clock(0x85))/16)*10 + (read_clock(0x85))%16;
        display_lcd2(e);   //显示小时*/
        delay_ms(1000);
        // d=read_clock(0x87);//读日
        //d=read_clock(0x89);//读月
        //    delay_ms(50);
        //d=read_clock(0x8d);//读年
        //d=read_clock(0x8b);//读年
}

/*--------------------时钟的初始化---------------------------*/
void Init_1302()//这部分是把杜样的初始化拿来的
{
  ///read_clock        从指定地址读数据           write_clock 向指定地址写数据
        unsigned char Second,f,x=0;
        Second=read_clock(0xc1);         //read_clock
        if(Second != 0x80) //第一次开机
        {
                write_clock(0x8e,0x00); //  允许写入
                write_clock(0x8c,0x10); // 10 年                    
                write_clock(0x88,0x11); // 11 月
                write_clock(0x86,0x12); // 10 日
                write_clock(0x8a,0x05); // 3  星期
                write_clock(0x84,0x20); //  时
                write_clock(0x82,0x52); //  分
                write_clock(0x80,0x55); //  秒
                write_clock(0xc0,0x80); //  二次开机标志
                write_clock(0x90,0xa5); //  允许充电 一个二极管 2K电阻

                for(f=0;f<60;f=f+2)//清除闹钟RAM位为0
                {
                        write_clock(0xc2+f,0x00);         //存储报时用
                }                                                                //第一次开机要清除其余30个寄存器
                write_clock(0x8e,0x80);                         //  禁止写入
        }
}

void main()
{
//        LCD_on();        // 背光OFF
        set=0;
        ks5=1;
        ks4=1;
        Beep();                        //开机声
        LCD_init();
//        LCD_off();        // 背光ON
        Init_1302();//DS1302寄存器初始化
//        keyshi=1;
//        keyfen=1;  
        delay_ms(10);

        while(1)
        {     
                key();
                if(set==0)
                {
                        show();  
                }
        }
}

点评

前面定义的端口有些乱了。。咋还出来P0和P2了捏?是2051不了?  发表于 2012-1-29 10:50
回复 支持 反对

使用道具 举报

9#
发表于 2011-3-22 20:57:49 | 只看该作者
欢迎大家拍砖,谁有更好的建议咱们一起探讨
回复 支持 反对

使用道具 举报

10#
发表于 2011-5-15 10:57:24 | 只看该作者

null

好资料,谢谢俩位老师傅的贡献,让我们分享你们的成果!在此谢谢了!
回复 支持 反对

使用道具 举报

11#
发表于 2011-6-27 14:45:55 | 只看该作者
不错,,做出个多位的才爽,,才三位,,太少了。。
回复 支持 反对

使用道具 举报

12#
发表于 2011-6-27 16:18:38 | 只看该作者
谁能把闲置的手机屏改造利用下?
回复 支持 反对

使用道具 举报

13#
 楼主| 发表于 2011-6-30 16:41:54 | 只看该作者
手机屏哪有那么好搞的,首先接口就不好弄
回复 支持 反对

使用道具 举报

14#
发表于 2011-6-30 21:07:07 | 只看该作者
能麻烦给个电路图吗?我不太懂C语言,看不懂怎么连线。谢谢!
回复 支持 反对

使用道具 举报

15#
 楼主| 发表于 2011-7-1 07:57:47 | 只看该作者
本帖最后由 gw168sh 于 2011-7-1 07:58 编辑
一片漆黑 发表于 2011-6-30 21:07
能麻烦给个电路图吗?我不太懂C语言,看不懂怎么连线。谢谢!

电路图没有画,你看看这段程序就知道了。
sbit   LCD_DATA = P1^2;//=14-2051的14脚接LCD的DATA脚
sbit   LCD_CLK = P1^3;//=15脚,下面的都一样
sbit   LCD_CS1 = P1^4;//=16
sbit clock_clk=P3^4;//=8
sbit clock_dat=P3^2;//=6
sbit clock_rst=P3^3;//=7
sbit ks5=P3^0;//=2
sbit ks4=P3^1;//=3
sbit keyshi=P3^5;//zhishi=9
sbit keyfen=P3^7;//=11 脚接按键
回复 支持 反对

使用道具 举报

16#
发表于 2011-7-19 10:11:03 | 只看该作者
请问晶振是多少M? LCD供电是5v?谢谢了!

点评

不太记得了,你先用8M的试一下,不行就是4M的,  发表于 2011-7-20 08:40
回复 支持 反对

使用道具 举报

17#
发表于 2011-8-20 15:34:37 | 只看该作者
没有图的。。。。。
回复 支持 反对

使用道具 举报

18#
发表于 2011-12-30 15:13:43 | 只看该作者
不错,能做成这样太难了
回复 支持 反对

使用道具 举报

19#
发表于 2012-3-12 22:25:18 | 只看该作者
做得不错,
回复 支持 反对

使用道具 举报

20#
发表于 2012-7-25 11:41:19 | 只看该作者
强烈感谢楼主
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|手机版|小黑屋|Archiver|长汀无线电厂交流论坛  

GMT+8, 2024-5-1 20:06 , Processed in 0.799839 second(s), 26 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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