⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zhkcsj.c

📁 文件夹里面有两个文件
💻 C
字号:
#include"at89x52.h"
#include<intrins.h>
#include<stdio.h>
#include<zi.h>

#define  uchar unsigned char 	
#define  uint  unsigned int
#define disp_off   0x3e
#define disp_on    0x3f
#define disp_x     0xb8
#define disp_z     0xc0
#define disp_y     0x40
#define comm       0
#define dat        1
#define data_ora   P0       

sbit LED_CLK=P1^0;   //LED时钟线
sbit LED_DAT=P1^1;   //LED数据线

sbit di =P3^7;  //Data or Instrument Select,H:写数据,L:写指令
sbit rw =P3^6;  //Write or Read,H:read,L:write
sbit e  =P1^2;  //读写使能
sbit cs1=P1^4;  //cs1=H,选择左半屏
sbit cs2=P1^3;  //cs2=H,选择右半屏
sbit rst=P1^5;  //Lcm reset,低有效

sbit data0=P2^0;
sbit data1=P2^1;
sbit data2=P2^2;
sbit data3=P2^3;
sbit mode0=P2^4;
sbit mode1=P2^5;
sbit start=P2^6;

void init_lcd(void);
void disps(void);
void disp_f(void);
void disp_m(void);
void disp_e(void);
void disp_pl(void);
void disp_ms(void);
void wr_lcd (uchar dat_comm,uchar content);
void lat_disp (uchar data1,uchar data2);
void chn_disp (uchar x,uchar y,uchar xl,uchar yl,uchar row_xl,uchar row_yl,uchar code *chn);

void led_display(uchar i);

const uchar code LED_FONT[11]={  //
	0xFC, //0
	0x60, //1
	0xDA, //2
	0xF2, //3
	0x66, //4
	0xB6, //5
	0xBE, //6
	0xE0, //7
	0xFE, //8
	0xF6, //9
    0x00, //不显示
};   

uchar set_freq;
uchar set_mode;
uint freq;
uchar mode;
uchar buchang;

void delayl (uint ms)
{
  uint i,j;
  for(i=0;i<ms;i++)
  for(j=0;j<100;j++)
  ;
}

set0()interrupt 0
{
   uchar i;
   delayl(10);
   if(set_freq==1){
	   if((P2&0x0f)==0x00){led_display(0);freq=freq*10;}
       if((P2&0x0f)==0x01){led_display(1);freq=freq*10+1;}
       if((P2&0x0f)==0x02){led_display(2);freq=freq*10+2;}
       if((P2&0x0f)==0x03){led_display(3);freq=freq*10+3;}
       if((P2&0x0f)==0x04){led_display(4);freq=freq*10+4;}
       if((P2&0x0f)==0x05){led_display(5);freq=freq*10+5;}
       if((P2&0x0f)==0x06){led_display(6);freq=freq*10+6;}
       if((P2&0x0f)==0x07){led_display(7);freq=freq*10+7;}
       if((P2&0x0f)==0x08){led_display(8);freq=freq*10+8;}
       if((P2&0x0f)==0x09){led_display(9);freq=freq*10+9;}
	   
   }
   if(set_mode==1){
	   if((P2&0x0f)==0x00){led_display(0);mode=0;}
       if((P2&0x0f)==0x01){led_display(1);mode=1;}
       if((P2&0x0f)==0x02){led_display(2);mode=2;}
      // mode=(P2&0x0f);               ?????????????
   }
	   if((P2&0x0f)==0x0a)
	   {
	      freq=0;
		  for(i=0;i<6;i++)led_display(0);
	      set_freq=1;set_mode=0;

	   }
	   if((P2&0x0f)==0x0b)
	   {
	      mode=0;
		  for(i=0;i<6;i++)led_display(0);
	      set_mode=1;set_freq=0;
	   }
	   if((P2&0x0f)==0x0c)
	   {
	      
		  buchang=freq/8;
		  P0=freq/8;
		  if((mode&0x01)==0)mode0=0;
		  else {mode0=1;}
		  if((mode&0x02)==0)mode1=0;
		  else {mode1=1;}
		  start=1;
		  delayl(55);
		  start=0;
		  set_freq=0;
		  set_mode=0;

       }
	   
         
    
}
main()					/*主程式*/
{
    
	EA=1;              /*CPU开中断*/
	IT0=1;             /*外部中断1下降沿触发方式*/
	EX0=1;             /*外部中断1的中断允许位置1*/
	freq=8;
	mode=0;
	start=0;
    led_display(0);
	led_display(0);
	led_display(0);
	led_display(0);
	led_display(0);
	led_display(8);
    init_lcd();
    lat_disp(0x00,0x00);
    disps();
	P0=freq/8;
	mode0=0;
	mode1=0;
	start=1;
	delayl(5);
	start=0;
	while(1){
	   if(set_freq==1)disp_f();
	   if(set_mode==1)disp_m();
	   if((set_freq==0)&&(set_mode==0)){disp_e();disp_pl();disp_ms();}
       delayl(4);
	}
}
/*------------写数据或命令到LCD--------------*/
void wr_lcd (uchar dat_comm,uchar content)
{
  //chk_busy ();
  di=dat_comm;
  rw=0;
  data_ora=content;
  e=1;
  ;
  e=0;
}
/*------------------初始化-----------------*/
void init_lcd (void)
{
  rst=0;
  delayl(5);
  rst=1;
  cs1=1;cs2=1;
  wr_lcd (comm,disp_off);
  wr_lcd (comm,disp_on);
}
/*---指定位置(x,y)显示row_xl行(每行row_yl个)汉字(大小8xl*yl)---*/
void chn_disp (uchar x,uchar y,uchar xl,uchar yl,uchar row_xl,uchar row_yl,uchar code *chn)
{
  uchar i,j,k,l,a;
  wr_lcd (comm,disp_on);
  for(l=0;l<row_xl;l++)
  {
    for(k=0;k<row_yl;k++)
    {
      for(j=0;j<xl;j++)
      {
        wr_lcd (comm,disp_x+x+l*xl+j);
        wr_lcd (comm,disp_z);
        wr_lcd (comm,disp_y+y+k*yl);
        a=l*xl*yl*row_yl+k*xl*yl+j*yl;
        for(i=0;i<yl;i++)
          wr_lcd (dat,chn[a+i]);
      }
    }
  }
}

/*--------------写点阵------------------*/
void lat_disp (uchar data1,uchar data2)
{
  uchar i,j;
  cs1=1;cs2=1;
  wr_lcd (comm,disp_on);
  for(j=0;j<8;j++)
  {
    wr_lcd (comm,disp_x+j);
    wr_lcd (comm,disp_z);
    wr_lcd (comm,disp_y);
    for(i=0;i<32;i++)
    {
      wr_lcd (dat,data1);
      wr_lcd (dat,data2);
    }
  }
}
void disps()
{
   
   lat_disp(0x00,0x00);
   cs1=0;cs2=1;
   chn_disp(0,2,2,8,1,3,kaishia);
   chn_disp(0,31,2,16,1,2,kaishib);   
}
void disp_f()
{
   
   cs1=0;cs2=1;
   chn_disp(2,0,2,16,1,4,szpl);
   chn_disp(4,0,2,16,1,2,pl);
}
void disp_m()
{
   
   cs1=0;cs2=1;
   chn_disp(2,0,2,16,1,4,szms);
   chn_disp(6,0,2,16,1,2,ms);
}
void disp_e()
{
   
   cs1=0;cs2=1;
   chn_disp(2,0,2,16,1,4,wcsz);
}
void disp_pl()
{
   uchar i;
   uchar j=0;
   uint midpinlv;
   cs1=1;cs2=0;
   midpinlv=freq;
   for(i=0;i<6;i++)
   {
      j=midpinlv%10;
	  midpinlv=midpinlv/10;
      chn_disp(4,40-8*i,2,8,1,1,shuzi+j*16);
   }
}
void disp_ms()
{
   
   if(mode==0)chn_disp(6,0,2,16,1,3,sin);
   if(mode==1)chn_disp(6,0,2,16,1,2,pulse);
   if(mode==2)chn_disp(6,0,2,16,1,3,angle);
}
void led_display(uchar i)
{
    uchar j,mask;
	mask=0x01;
	for(j=0;j<8;j++){
		LED_CLK=0;
		LED_DAT=( (LED_FONT[i]) & mask);
		mask<<=1;
		LED_CLK=1;   //上升沿移位
	}
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -