单片机编写查表程序程序_单片机查表程序中使用的数据表格

单片机编写查表程序程序_单片机查表程序中使用的数据表格单片机c15c语言查表程序,单片机C语言程序举例(二)本文引用地址:http://www.eepw.com.cn/article/201611/320071.htm#include#in

单片机c15c语言查表程序,单片机C语言程序举例(二)
  本文引用地址:http://www.eepw.com.cn/article/201611/320071.htm

  #include#include#include

  unsigned int hour,minute,second,count;

  sbit RS = P2^4;//Pin4

  sbit RW = P2^5; //Pin5

  sbit E = P2^6;//Pin6

  sbit BLCtrl = P2^7;

  sbit KEY = P3^2;

  #define Data P0 //数据端口

  char data TimeNum[]=" ";

  char data Test1[]=" ";

  void DelayUs(unsigned char us)//delay us

  {

  unsigned char uscnt;

  uscnt=us>>1;

  while(–uscnt);

  }

  void DelayMs(unsigned char ms)//delay Ms

  {

  while(–ms)

  {

  DelayUs(250);

  DelayUs(250);

  DelayUs(250);

  DelayUs(250);

  }

  }

  void WriteCommand(unsigned char c)

  {

  DelayMs(5);//short delay before operation

  E=0;

  RS=0;

  RW=0;

  _nop_();

  E=1;

  Data=c;

  E=0;

  }

  void WriteData(unsigned char c)

  {

  DelayMs(5); //short delay before operation

  E=0;

  RS=1;

  RW=0;

  _nop_();

  E=1;

  Data=c;

  E=0;

  RS=0;

  }

  void ShowChar(unsigned char pos,unsigned char c)

  {

  unsigned char p;

  if (pos>=0x10)

  p=pos+0xb0; //是第二行则命令代码高4位为0xc

  else

  p=pos+0x80; //是第二行则命令代码高4位为0x8

  WriteCommand (p);//write command

  WriteData (c); //write data

  }

  void ShowString (unsigned char line,char *ptr)

  {

  unsigned char l,i;

  l=line<<4;

  for (i=0;i<16;i++)

  ShowChar (l++,*(ptr+i));//循环显示16个字符

  }

  void InitLcd()

  {

  DelayMs(15);

  WriteCommand(0x38); //display mode

  WriteCommand(0x38); //display mode

  WriteCommand(0x38); //display mode

  WriteCommand(0x06); //显示光标移动位置

  WriteCommand(0x0c); //显示开及光标设置

  WriteCommand(0x01); //显示清屏

  }

  /

  void main(void)

  {

  InitLcd();//初始化液晶

  DelayMs(15);

  sprintf(Test1," www.haotun.com ");//第一行

  ShowString(0,Test1);

  sprintf(TimeNum,"LCM1602 Test ok!");//第二行

  ShowString(1,TimeNum);

  while(1){

  if(!KEY)

  {

  DelayMs(10);//按下去抖

  while(!KEY);

  if(KEY)

  {

  DelayMs(10);//释放去抖

  if(KEY)

  BLCtrl=!BLCtrl; //背光关掉或者打开

  }

  }

  }

  }

  9.步进电机控制

  #include

  unsigned char code F_Rotation[4]={0x02,0x04,0x08,0x10};//正转表格

  unsigned char code B_Rotation[4]={0x10,0x08,0x040,0x02};//反转表格

  void Delay(unsigned int i)//延时

  {

  while(–i);

  }

  main()

  {

  unsigned char i;

  while(1)

  {

  for(i=0;i<4;i++) //4相

  {

  P1=F_Rotation[i]; //输出对应的相 可以自行换成反转表格

  Delay(10000); //改变这个参数可以调整电机转速

  }

  }

  }

  10. 直流电机调速

  #include sbit KEY1 = P3^1;

  sbit PWM = P1^5;

  unsigned char CYCLE; //定义周期 该数字X基准定时时间 如果是10 则周期是10 x 0.1ms

  unsigned char PWM_ON ;//定义高电平时间

  void delay(unsigned int cnt)

  {

  while(–cnt);

  }

  main()

  {

  unsigned char PWM_Num;//定义档位

  TMOD |=0x01;//定时器设置 1ms in 12M crystal

  TH0=(65536-1000)/256;

  TL0=(65536-1000)%256;//定时1mS

  IE= 0x82; //打开中断

  TR0=1;

  CYCLE = 10;// 时间可以调整 这个是10步调整 周期10ms 8位PWM就是256步

  while(1)

  {

  if(!KEY1)

  {

  delay(10000);

  if(!KEY1)

  {

  PWM_Num++;

  if(PWM_Num==4)PWM_Num=0;

  switch(PWM_Num){

  case 0:P1=0xFE;PWM_ON=0;break;//高电平时长

  case 1:P1=0xFD;PWM_ON=4;break;

  case 2:P1=0xFB;PWM_ON=6;break;

  case 3:P1=0xF7;PWM_ON=8;break;

  default:break;

  }

  }

  }

  }

  }

  void tim(void) interrupt 1 using 1

  {

  static unsigned char count; //

  TH0=(65536-1000)/256;

  TL0=(65536-1000)%256;//定时1mS

  if (count==PWM_ON)

  {

  PWM = 1; //灯灭

  }

  count++;

  if(count == CYCLE)

  {

  count=0;

  if(PWM_ON!=0) //如果左右时间是0 保持原来状态

  PWM = 0;//灯亮

  }

  }

  11.秒表

  #include

  code unsigned char tab[]=

  {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

  //共阴数码管 0-9

  unsigned char Dis_Shiwei;//定义十位

  unsigned char Dis_Gewei; //定义个位

  unsigned char S_Dis_Shiwei;//定义秒十位

  unsigned char S_Dis_Gewei; //定义秒个位

  unsigned char second,msecond;

  void CLR(void);

  void delay(unsigned int cnt)

  {

  while(–cnt);

  }

  main()

  {

  EX0=1;//外部中断0设置

  IT0=1;

  EX1=1;//外部中断1设置

  IT1=1;

  TMOD |=0x01;//定时器设置 10ms in 12M crystal

  TH0=0xd8;

  TL0=0xf0;

  ET0=1; //打开中断

  TR0=0;

  EA=1;

  CLR();

  while(1)

  {

  P0=S_Dis_Shiwei;//显示秒十位

  P2=1;

  delay(300);//短暂延时

  P0=S_Dis_Gewei; //显示秒个位

  P2=2;

  delay(300);

  P0=0x40; //显示秒个位

  P2=3;

  delay(300);

  P0=Dis_Shiwei;//显示十位

  P2=4;

  delay(300);//短暂延时

  P0=Dis_Gewei; //显示个位

  P2=5;

  delay(300);

  }

  }

  void tim(void) interrupt 1 using 1

  {

  TH0=0xd8;//重新赋值

  TL0=0xf0;

  msecond++;

  if (msecond==100)

  {

  msecond=0;

  second++;//秒加1

  if(second==100)

  second=0;

  S_Dis_Shiwei=tab[second/10];//十位显示值处理

  S_Dis_Gewei=tab[second%10]; //个位显示处理

  }

  Dis_Shiwei=tab[msecond/10];//十位显示值处理

  Dis_Gewei=tab[msecond%10]; //个位显示处理

  }

  void ISR_INT0(void) interrupt 0 using 1

  {

  TR0=!TR0; //利用外部中断打开和关闭定时器0 用于开始和停止计时

  }

  void ISR_INT1(void) interrupt 2 using 1

  {

  if(TR0==0)//停止时才可以清零

  CLR();

  }

  void CLR(void)

  {

  second=0; //利用外部中断清零

  msecond=0;

  Dis_Shiwei=tab[msecond/10];//十位显示值处理

  Dis_Gewei=tab[msecond%10]; //个位显示处理

  S_Dis_Shiwei=tab[second/10];//十位显示值处理

  S_Dis_Gewei=tab[second%10]; //个位显示处理

  }

  12.花样灯

  #include

  unsigned char code seg[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff,0xff,0x00,0,0×55,0x55,0xaa,0xaa};//rom允许情况可以无限添加

  void delay(unsigned int cnt)//简易延时

  {

  while(–cnt);

  }

  ///

  main()

  {

  unsigned char i;

  while(1)

  {

  P1=0xFE;//第一个LED亮

  for(i=0;i<8;i++)

  {

  delay(10000);

  P1 <<=1;

  }

  P1=0x7F;//第七个LED亮

  for(i=0;i<8;i++)

  {

  delay(10000);

  P1 >>=1;

  }

  P1=0xFE;//第一个LED亮

  for(i=0;i<8;i++)

  {

  delay(10000);

  P1 <<=1;

  P1 |=0x01;

  }

  P1=0x7F;//第七个LED亮

  for(i=0;i<8;i++)

  {

  delay(10000);

  P1 >>=1;

  P1 |=0x80;

  }

  for(i=0;i<16;i++)//查表可以简单的显示各种花样 实用性更强

  {

  delay(20000);

  P1=seg[i];

  }

  }

  }

  13.红绿灯

  #include

  bit red,green,yellow,turnred;

  code unsigned char tab[]=

  {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

  //共阴数码管 0-9

  unsigned char Dis_Shiwei;//定义十位

  unsigned char Dis_Gewei; //定义个位

  void delay(unsigned int cnt)

  {

  while(–cnt);

  }

  main()

  {

  TMOD |=0x01;//定时器设置 10ms in 12M crystal

  TH0=0xd8;

  TL0=0xf0;

  IE= 0x82; //打开中断

  TR0=1;

  P1=0xfc;//红灯亮

  red =1;

  while(1)

  {

  P0=Dis_Shiwei;//显示十位

  P2=0;

  delay(300);//短暂延时

  P0=Dis_Gewei; //显示个位

  P2=1;

  delay(300);

  }

  }

  void tim(void) interrupt 1 using 1

  {

  static unsigned char second=60,count; //初值99

  TH0=0xd8;//重新赋值

  TL0=0xf0;

  count++;

  if (count==100)

  {

  count=0;

  second–;//秒减1

  if(second==0)

  { //这里添加定时到0的代码 ,可以是灯电路,继电器吸合等,或者执行一个程序

  if(red)

  {

  red=0;yellow=1;

  second=5;

  P1=0xF3;//黄灯亮5秒

  }

  else if(yellow && !turnred)

  {

  yellow=0;green=1;

  second=50;

  P1=0xCF;//绿灯亮50秒

  }

  else if(green)

  {

  yellow=1;green=0;

  second=5;

  P1=0xF3;//黄灯亮5秒

  turnred=1;

  }

  else if(yellow && turnred)

  {

  red=1;yellow=0;

  P1=0xFC;//红灯亮60秒

  second=60;

  turnred=0;

  }

  }

  Dis_Shiwei=tab[second/10];//十位显示值处理

  Dis_Gewei=tab[second%10]; //个位显示处理

  }

  }

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/94191.html

(0)
上一篇 2024年 5月 26日
下一篇 2024年 5月 26日

相关推荐

关注微信