立即注册 登录
返回首页

uid:186510的个人空间

日志

自制一个计数器,代码如下

已有 1063 次阅读2017-8-21 22:37 |个人分类:日常程序

#include <reg51.h>
#include <intrins.h>
#define uint unsigned int 
#define uchar unsigned char
//sbit E=P0^5;
//sbit RW=P0^6;
//sbit RS=P0^7;

sbit E=P1^4;
sbit RW=P1^5;
sbit RS=P1^6;

sbit P00=P3^2;
sbit P13=P1^3;

uint s1,s2,s3,s4,s5,s6,s7,s8;
uint count=0;
uint i=0;
uint j;

void Delay1ms(uchar m)   //误差 0us
{
    uchar a,b,c;
   for(c=1;c<m;c++)
        for(b=142;b>0;b--)
            for(a=2;a>0;a--);
}

 void delay(unsigned int n)
 {
    unsigned int i;
for(i=0;i<n;i++)
Delay1ms(1);
 }

bit BusyTest(void)
  {
    bit result;
        RS=0;//根据规定,RS为低电平,RW为高电平时,可以读状态
    RW=1;
    E=1;        //E=1,才允许读写
    _nop_();   //空操作
    _nop_();
    _nop_(); 
    _nop_();   //空操作四个机器周期,给硬件反应时间
 
E=0;
    return result;
  }


void LcdWriteData(unsigned char dat)
{
while(BusyTest()==1); //如果忙就等待
RS=1;
RW=0;
P2=dat;
Delay1ms(10);
E=1;
Delay1ms(10);
E=0;
}

void LcdWriteCom(unsigned char com)  
{
while(BusyTest()==1);             //如果忙就等待
RS=0;
RW=0;
P2=com;
Delay1ms(10);
E=1;
Delay1ms(10);
E=0;
}


void CSH()      //LCD1602初始化
{
  LcdWriteCom(0x38);  
LcdWriteCom(0x0c);  
LcdWriteCom(0x06);  
LcdWriteCom(0x01); 
LcdWriteCom(0x80);
}

void lcd()   //lcd1602第一行显示
{
   uint i;
   uchar a[16]={"The number is : "};
   CSH();
LcdWriteCom(0x00);   //第二行第一个为C0;
for(i=0;i<16;i++)
{
LcdWriteData(a[i]);
}
}

void lcd2()   //lcd1602第二行显示
{
   uint i;
   uchar a[16]={"          Beyond"};
   CSH();
LcdWriteCom(0xC0);   //第二行第一个为C0;
for(i=0;i<16;i++)
{
LcdWriteData(a[i]);
}
}

void int_0() interrupt 0     //设置外部中断,记满9999个数清零
{
if(count==9999)
{
count=0;
}
else count++;
}


void main()
{
CSH();
lcd();

while(1)
{
// if(P00==0)
// {
// Delay1ms(10);
// if(P00==0)
// j++;
// }
 
EX0=1;   //设置外部中断0,
IT0=1;   //设置为负跳变沿检测模式     
    EA=1;
j=count;
  if(count==9999) //超出测量范围显示"ERROR"
{  
 
 LcdWriteCom(0x80+0x40+10);
 LcdWriteData('B'); delay(5);
    LcdWriteData('E'); delay(5);
 LcdWriteData('Y'); delay(5);
 LcdWriteData('O'); delay(5);
 LcdWriteData('N'); delay(5);
LcdWriteData('D'); delay(5);
while(1);
}

s4=j%10000/1000;
 s1=j%1000/100;
       s2=j%1000%100/10;
       s3=j%1000%10%10;

LcdWriteCom(0xC0+15);   //第二行第一个为C0;
LcdWriteData(0x30+s3);
LcdWriteCom(0xC0+14);  
LcdWriteData(0x30+s2);
LcdWriteCom(0xC0+13);  
LcdWriteData(0x30+s1);
LcdWriteCom(0xC0+12);   
LcdWriteData(0x30+s4);

}
}


路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)

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

Powered by 单片机教程网

返回顶部