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

📄 ex6-2.c

📁 < 嵌入式C语言程序设计>>一书的源代码
💻 C
字号:
/*
标题:范例 6-2
版本:1.0
Target:89S51
程序描述:数字电压表*/
/*  **************************************************** */ 
#include <REGX51.H>
#define  TIMER0_COUNT 0xDC11   /* 10000h-(11,059,200/(12*
                                  FREQ))-17 */
/* LCD command */
#define  DISPLAY_ON      56
#define  CURSOR_OFF      12
#define  CURSOR_RIGHT    6
#define  CLEAR           1
#define  CURSOR_HOME     2
#define  GOTO_LINE_2     192
#define  GOTO_LINE_1     128
/* LCD control lines */
#define  ENABLE          1
#define  DISABLE         0
#define  READ            1
#define  WRITE           0
#define  COMMAND         0
#define  DATA            1
#define  rs              P3_5
#define  rw              P3_4
#define  enable          P3_3
#define  adc_in          P0
#define  adc_rd          P2_0
#define  adc_wr          P2_1
static unsigned timer0_tick;
const char  int2char[]="0123456789";
void delay_2ms(void)  {                   /* 时间延迟函数 */
  unsigned char i,j;                      /* 延迟2 ms   */
     for (i=0;i<3;i++)
            for(j=0;j<255;j++)
            ;
}
void write_LCD_command(unsigned command)
{
     rw=WRITE;
     rs=COMMAND;
     enable=ENABLE;
     P1=command;
     enable=DISABLE;
     rs=1;
     rw=1;
     delay_2ms();
}
void write_LCD_data(unsigned LCDdata)
{
     rw=WRITE;
     rs=DATA;
     enable=ENABLE;
     P1=LCDdata;
     enable=DISABLE;
     rs=0;
     rw=1;
     delay_2ms();
}
void set_LCD(void)
{
     write_LCD_command(DISPLAY_ON);
     write_LCD_command(CURSOR_OFF);
     write_LCD_command(CURSOR_RIGHT);
}
void clear_LCD()
{
     write_LCD_command(CLEAR);
     write_LCD_command(CURSOR_HOME);
}
display_LCD_string(char *p)
{
     while(*p)
     {
             write_LCD_data(*p);
             p++;
     }
}
void gotoxy(unsigned x,unsigned y)
{
     if(x==1)
             write_LCD_command(GOTO_LINE_1+y);
     else
     write_LCD_command(GOTO_LINE_2+y);
}
void display_LCD_number(unsigned char number)
{
     unsigned char x,y,i=2;
     int z;
     z=(int) number;
     z=z<<1;
     x=z/10;
     y=z-x*10;
     gotoxy(2,3);
     write_LCD_data(int2char[y]);
     z=x;
     x=z/10;
     y=z-x*10;
     gotoxy(2,2);
     write_LCD_data(int2char[y]);
     gotoxy(2,1);
     display_LCD_string(".");
     z=x;
     x=z/10;
     y=z-x*10;
     gotoxy(2,0);
     write_LCD_data(int2char[y]);
     gotoxy(2,4);
     display_LCD_string("Volt");
}
static void timer0_isr(void) interrupt 1 using 1
{
  TR0=0;
  TL0=(TIMER0_COUNT & 0x00FF);
  TH0=(TIMER0_COUNT >> 8);
  TR0=1;
  timer0_tick++;
  if (timer0_tick==200) {
        adc_wr=0;
        timer0_tick=0;
        adc_wr=1;       
  }             
}
static void int0_isr(void) interrupt 0 using 0
{
        unsigned char voltage;
        adc_in=0xFF;
        adc_rd=0;
        voltage=adc_in;
        voltage=voltage <<1;
        adc_rd=1;
        gotoxy(2,0);
        display_LCD_number(voltage);    
}
static void timer0_initialize(void)
{
  EA=0;   
  timer0_tick=0;
  TR0=0;
  TMOD &= 0XF0;
  TMOD |=0x01;
  TL0=(TIMER0_COUNT & 0x00FF);
  TH0=(TIMER0_COUNT >> 8);
  PT0=0;
  ET0=1;
  TR0=1;
  EA=1;
}
void main (void)  {
  set_LCD();
  clear_LCD();
  display_LCD_string("Input voltage=");
  timer0_initialize();
  IT0=1;
  EX0=1;
  while(1);                        /* 无穷循环 */
}

⌨️ 快捷键说明

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