当前位置: 首页 > news >正文

STC15W408AS计数器

/***STC15W408AS计数器 2025 5 12 *********/
              #include     <reg52.h>             //
              #include     <intrins.H>           //
              #define      uchar  unsigned char
              #define      uint   unsigned int
              uchar        kcounter;                       
              uchar        kstatus;
              sbit         IntPut0=P3^4;         //
              sbit         IntPut1=P3^5;         //
              sbit         IntPut2=P3^6;         //
              sbit         IntPut3=P3^7;         //
              sbit         OutPut0=P3^2;         //
              sbit         OutPut1=P3^3;         //
              sbit         OutPut2=P1^3;         //
              sbit         OutPut3=P1^4;         //
              sbit         OutPut4=P1^5;         //
              uint         Counter;                           //产量计数器
              sbit         OLED_SCL=P1^1;       //
              sbit         OLED_SDA=P1^0;       //
              #define      high 1
              #define      low 0
/*************Pin Define***************/
              void         Initial_LY096BG30();
              void         Delay_50ms(uint Del_50ms);
              void         fill_picture(uchar fill_Data);
              void         IIC_Start();
              void         IIC_Stop();
              void         Write_IIC_Command(uchar IIC_Command);
              void         Write_IIC_Data(uchar IIC_Data);
              bit          Write_IIC_Byte(uchar IIC_Byte);
              void         dis_Value(uchar s);
/***********************0--A字符表*************************/
uchar code show1[]=
{
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,/*"0",0*/
0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,/*"1",1*/
0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,/*"2",2*/
0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,/*"3",3*/
0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,/*"4",4*/
0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,/*"5",5*/
0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,/*"6",6*/
0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,/*"7",7*/
0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,/*"8",8*/
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,/*"9",9*/
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x1F,0x01,0x01,0x01,0x01,0x1F,0x00,/*"A",10*/
0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,/*"D",11*/
0x08,0xF8,0x00,0xF8,0x00,0xF8,0x08,0x00,0x00,0x03,0x3E,0x01,0x3E,0x03,0x00,0x00,/*"W",12*/
0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,/*"O",13*/
0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,/*"N",14*/
};                               
/***********************0--A字符表*************************/
uchar code show2[]=
{
//电(0) 机(1) 开(2) 关(3) 一(4) 二(5) 三(6) 四(7) 五(8) 六(9) 七(10) 八(11) 九(12) 十(13)
0x00,0x00,0xF8,0x88,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0x88,0xF8,0x00,0x00,0x00,
0x00,0x00,0x1F,0x08,0x08,0x08,0x08,0x7F,0x88,0x88,0x88,0x88,0x9F,0x80,0xF0,0x00,/*"电",0*/
0x10,0x10,0xD0,0xFF,0x90,0x10,0x00,0xFE,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,
0x04,0x03,0x00,0xFF,0x00,0x83,0x60,0x1F,0x00,0x00,0x00,0x3F,0x40,0x40,0x78,0x00,/*"机",1*/
0x80,0x82,0x82,0x82,0xFE,0x82,0x82,0x82,0x82,0x82,0xFE,0x82,0x82,0x82,0x80,0x00,
0x00,0x80,0x40,0x30,0x0F,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,/*"开",2*/
0x00,0x00,0x10,0x11,0x16,0x10,0x10,0xF0,0x10,0x10,0x14,0x13,0x10,0x00,0x00,0x00,
0x81,0x81,0x41,0x41,0x21,0x11,0x0D,0x03,0x0D,0x11,0x21,0x41,0x41,0x81,0x81,0x00,/*"关",3*/
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"一",4*/
0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x00,0x00,
0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,/*"二",5*/
0x00,0x04,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x04,0x00,0x00,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,/*"三",6*/
0x00,0xFC,0x04,0x04,0x04,0xFC,0x04,0x04,0x04,0xFC,0x04,0x04,0x04,0xFC,0x00,0x00,
0x00,0x7F,0x28,0x24,0x23,0x20,0x20,0x20,0x20,0x21,0x22,0x22,0x22,0x7F,0x00,0x00,/*"四",7*/
0x00,0x02,0x42,0x42,0x42,0xC2,0x7E,0x42,0x42,0x42,0x42,0xC2,0x02,0x02,0x00,0x00,
0x40,0x40,0x40,0x40,0x78,0x47,0x40,0x40,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x00,/*"五",8*/
0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x22,0x2C,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
0x00,0x40,0x20,0x10,0x0C,0x03,0x00,0x00,0x00,0x01,0x02,0x04,0x18,0x60,0x00,0x00,/*"六",9*/
0x80,0x80,0x80,0x80,0x80,0x40,0xFF,0x40,0x40,0x40,0x20,0x20,0x20,0x20,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,0x40,0x40,0x40,0x40,0x78,0x00,0x00,/*"七",10*/
0x00,0x00,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0x7E,0x80,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x60,0x18,0x07,0x00,0x00,0x00,0x00,0x00,0x03,0x0C,0x30,0x40,0x80,0x00,/*"八",11*/
0x00,0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x10,0xF0,0x00,0x00,0x00,0x00,0x00,
0x80,0x40,0x20,0x18,0x07,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,0x40,0x78,0x00,/*"九",12*/
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xFF,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"十",13*/
};   
/**************Delay*******************************/
              void   Delay_50ms(uint Del_50ms)        //
              {
               uint m;
               for(;Del_50ms>0;Del_50ms--)
               for(m=62450;m>0;m--);
              }
/*******************IIC Start******************/
              void IIC_Start()
              {
               OLED_SCL=high;
               OLED_SDA=high;
               _nop_();
               OLED_SDA=low;
               _nop_();_nop_();
               OLED_SCL=low;
              }
/*************IIC Stop*************************/
              void IIC_Stop()
              {
              OLED_SDA=low;
              _nop_();
              OLED_SCL=high;
              _nop_();_nop_();
              OLED_SDA=high;
              }
/*****************IIC Write byte***************/
              bit Write_IIC_Byte(unsigned char IIC_Byte)
              {
              unsigned char i;
               bit Ack_Bit;                      //应答信号
               for(i=0;i<8;i++)        
               {
               if(IIC_Byte & 0x80)               //1?0?
               OLED_SDA=high;
               else
               OLED_SDA=low;
               OLED_SCL=high;
               _nop_();_nop_();
               OLED_SCL=low;
               IIC_Byte<<=1;                     //loop
               }
              OLED_SDA=high;                     //释放IIC SDA总线为主器件接收从器件产生应答信号    
              _nop_();_nop_();
              OLED_SCL=high;                     //第9个时钟周期
              _nop_();_nop_();
              Ack_Bit=OLED_SDA;                  //读取应答信号
              OLED_SCL=low;
              return Ack_Bit;    
              }  
/*************IIC Write Command*****************/
              void Write_IIC_Command(unsigned char IIC_Command)
              {
              IIC_Start();
              Write_IIC_Byte(0x78);              //Slave address,SA0=0
              Write_IIC_Byte(0x00);              //write command
              Write_IIC_Byte(IIC_Command);
              IIC_Stop();
              }
/****************IIC Write Data*****************/
              void Write_IIC_Data(uchar IIC_Data)
              {
              IIC_Start();
              Write_IIC_Byte(0x78);            
              Write_IIC_Byte(0x40);              //write data
              Write_IIC_Byte(IIC_Data);
              IIC_Stop();
              }
/********************picture**********************/
              void Clear_disp()
              {
              uchar x,y;
              for(y=0;y<8;y++)
               {
               Write_IIC_Command(0xb0+y);
               Write_IIC_Command(0x00);
               Write_IIC_Command(0x10);
                for(x=0;x<128;x++)               //横向像素
                {
                Write_IIC_Data(0X00);
                }
               }
              }
/***********************Initial code*********************/
              void  Initial_LY096BG30()
              {
              Write_IIC_Command(0xAE);   //display off
              Write_IIC_Command(0x20);   //Set Memory Addressing Mode    
              Write_IIC_Command(0x10);     //00,Horizontal Addressing Mode;01,Vertical Addressing Mode;10,Page Addressing Mode (RESET);11,Invalid
              Write_IIC_Command(0xb0);     //Set Page Start Address for Page Addressing Mode,0-7
              Write_IIC_Command(0xc8);      //Set COM Output Scan Direction
              Write_IIC_Command(0x00);   //---set low column address
              Write_IIC_Command(0x10);   //---set high column address
              Write_IIC_Command(0x40);   //--set start line address
              Write_IIC_Command(0x81);   //--set contrast control register
              Write_IIC_Command(0x7f);
              Write_IIC_Command(0xa1);   //--set segment re-map 0 to 127
              Write_IIC_Command(0xa6);   //--set normal display
              Write_IIC_Command(0xa8);   //--set multiplex ratio(1 to 64)
              Write_IIC_Command(0x3F);   //
              Write_IIC_Command(0xa4);   //0xa4,Output follows RAM content;0xa5,Output ignores RAM content
              Write_IIC_Command(0xd3);   //-set display offset
              Write_IIC_Command(0x00);   //-not offset
              Write_IIC_Command(0xd5);   //--set display clock divide ratio/oscillator frequency
              Write_IIC_Command(0xf0);   //--set divide ratio
              Write_IIC_Command(0xd9);   //--set pre-charge period
              Write_IIC_Command(0x22);   //
              Write_IIC_Command(0xda);   //--set com pins hardware configuration
              Write_IIC_Command(0x12);
              Write_IIC_Command(0xdb);   //--set vcomh
              Write_IIC_Command(0x20);   //0x20,0.77xVcc
              Write_IIC_Command(0x8d);   //--set DC-DC enable
              Write_IIC_Command(0x14);   //
              Write_IIC_Command(0xaf);   //--turn on oled panel
             }
/****************按键计数器状态寄存器归零*************/
              void RstKey(void)
              {
              kcounter=0;                        //按键计数器归零
              kstatus=0;                         //状态寄存器归零
              }
/*****************按键低电平检测函数*****************/
              void   LowVoltKey(void)            //按键计数器状态标志加一
              {
              kcounter++;                       
              kstatus++;     
              _nop_();                           //延时                  
              }
/*****************按键低电平检测函数*****************/
              void   HighVoltKey(void)
              {
              kcounter++;                       
              kstatus=0;     
              _nop_();                           //延时                  
              }
/*****16X16中文字体显示子程序 dd字符数组地址***/
/***xx横向坐标 10~17 yy竖向坐标B0 B2 B4 B6***/
/***void Display(0x10,0XB0,0X00)***/                           
              void Display(uchar xx,yy, uint dd)
              {
              uchar x,y;
              uint  i=0;
              uint  Cnt=32;
              for(y=0;y<2;y++)
               {
               Write_IIC_Command(yy+y);          //竖向第yy行    yy=0XB0 0XB2 0XB4 0XB6
               Write_IIC_Command(0x00);          //
               Write_IIC_Command(xx);               //横向第XX个字
                for(x=0;x<16;x++)                     //横向像素
                {
                Write_IIC_Data(show2[x+y*16+Cnt*dd]); //字符表第dd个字
                }
               }   
              }                             
/*****************产量显示****************/   
              void DisDelayTime(uchar xx,yy,uint RunTime)
              {
               uchar x,y;
               uint i=0;
               uchar A1,A2,A3;
               A1=RunTime/100;
               A2=(RunTime-A1*100)/10;
               A3=RunTime-A1*100-A2*10;
               for(y=0;y<2;y++)                  //百位显示
               {
               Write_IIC_Command(yy+y);          //纵向页
               Write_IIC_Command(00);            //横向离左部边缘开始的距离
               Write_IIC_Command(xx);            //横向第四个字
                for(x=0;x<8;x++)                 //横向像素
                {
                Write_IIC_Data(show1[x+y*8+A1*16]);     //百位显示 0--A字符表
                }
                for(x=0;x<8;x++)                 //横向像素
                {
                Write_IIC_Data(show1[x+y*8+A2*16]);    //十位显示
                }
               }
               for(y=0;y<2;y++)                 
                {
                Write_IIC_Command(yy+y);       //纵向页
                Write_IIC_Command(00);           //横向离左部边缘开始的距离
                Write_IIC_Command(xx+1);         //横向第五个字
                 for(x=0;x<8;x++)                //横向像素
                 {
                 Write_IIC_Data(show1[x+y*8+A3*16]); //个位显示
                 }
               }
             }                           
/***************************************/
              void t0int()interrupt 1
              {
               OutPut0=~OutPut0;
              }
/***************************************/
              void  main()                       //
              {
               P1M0=0X00;                        //1.0~1.5准双向输入
               P1M1=0X00;                        //1.6~1.7推挽输出
               P3M0=0X00;                        //准双向输入
               P3M1=0X00;                        //准双向输入
               P5M0=0X30;                        //
               P5M1=0X00;                        //
               EA=1;                             //
               Counter=0;
               Initial_LY096BG30();
               Clear_disp();
               Delay_50ms(20);
               Display(0X16,0XB0,1);
               DisDelayTime(0X10,0XB0,100);
               RstKey();
               LowVoltKey();
               HighVoltKey();
               AUXR=0X80;
               TMOD=0X04;
               TL0=0XFF;
               TH0=0XFF;
               ET0=1;
               TR0=1;
                  EA=1;
               while(1)                          //
                {
                 Delay_50ms(20);
                 OutPut2=~OutPut2;         //
                }                                //
              }                                  //L308 CODE1583

相关文章:

  • 分水岭算法:从逻辑学角度看图像分割的智慧
  • 图像匹配导航定位技术 第 12 章
  • 报表制作工具PK:山海鲸报表和Looker,谁更适合新手使用?
  • 如何使用 WMIC 命令在 Windows 11 或 10 上卸载软件
  • 机器学习实战:归一化与标准化的选择指南
  • MAC-OS X 命令行设置IP、掩码、网关、DNS服务器地址
  • # 实时英文 OCR 文字识别:从摄像头到 PyQt5 界面的实现
  • Go 语言 slice(切片) 的使用
  • Git安装教程及常用命令
  • 数据结构-树(2)
  • [python] 面向对象的三大特性-封装及新式类
  • Python制作Dashboard【待续】
  • upload-labs通关笔记-第01关 文件上传之前端绕过(3种渗透方法)
  • Clinica集成化的开源平台-神经影像研究
  • 解决下拉框数据提交后回显名称不对
  • 企业级常用的 CentOS版本
  • 如何指定conda环境打包成docker镜像
  • 5G网络:能源管理的“智能电网“革命,Python如何成为关键推手?
  • 苹果电脑笔记本macos Mac安装mixly 米思齐软件详细指南
  • OpenHarmony Linux内核本地管理
  • 18世纪“精于剪切、复制、粘贴”的美国新闻界
  • 媒体和打拐志愿者暗访长沙一地下代孕实验室,警方已控制涉案人员
  • 专访|西蒙·斯特朗格:以“辞典”的方式讲述二战家族史
  • 电影路演,虚幻狂欢?
  • 媒体谈法院就“行人相撞案”道歉:执法公正,普法莫拉开“距离”
  • 习近平将出席中国—拉美和加勒比国家共同体论坛第四届部长级会议开幕式并发表重要讲话