PIC单片机+LCD+DS1302+AD程序

发布者:数据旅人最新更新时间:2016-09-08 来源: eefocus关键字:PIC单片机  LCD  DS1302  AD程序 手机看文章 扫描二维码
随时随地手机看文章
//初学C按键LCD+DS1302+AD程序

//;*******************************************

查看更多精彩图片0 && image.height>0){if(image.width>=700){this.width=700;this.height=image.height*700/image.width;}}" border=0>


#include
#include
#define uchar  unsigned char
#define uint   unsigned int
static volatile unsigned char acc @ 0x20;
static volatile bit acc0     @ (unsigned)&acc*8+0;
static volatile bit acc7     @ (unsigned)&acc*8+7;
#define PORTAIT(add,bit) ((unsigned)(&add)*8+(bit))
#define PORTBIT(add,bit) ((unsigned)(&add)*8+(bit))
#define PORTCIT(add,bit) ((unsigned)(&add)*8+(bit))

static  bit    RS  @  PORTCIT(PORTC,0);   
static  bit    RW  @  PORTCIT(PORTC,1);   
static  bit    E   @  PORTCIT(PORTC,2);   
static  bit T_RST  @  PORTCIT(PORTC,5);   
static  bit  T_CLK @  PORTCIT(PORTC,6);   
static  bit  T_IO  @  PORTCIT(PORTC,7);  

static  bit  PORTA_0 @  PORTAIT(PORTA,0);   ///*定义PORTA 0位*/
static  bit  PORTA_1 @  PORTAIT(PORTA,1);   ///*定义PORTA 1位*/
static  bit  PORTA_2 @  PORTAIT(PORTA,2);   ///*定义PORTA 2位*/
static  bit  PORTA_5 @  PORTAIT(PORTA,5);  

static  bit  RB_7 @  PORTBIT(PORTB,7);
const   unsigned char  Data[ ]={'0', '1', '2','3','4', '5', '6','7', '8','9',' '};
const   unsigned char  Ds1302[] = {9, 9, 0, 7,  1, 9 ,3,9,  2,4, 5, 9 ,5,9,};
                                                      // // 年  星期   月    日    时   分  秒
const   unsigned char ds1302_sub[ ]={0};
uchar  DisCash[]={0x00,0x30,0x09,0x1,0x06,0x06,0x06}; 
                              //初始化参数  秒  分  时  日 月 星期 年 
  unsigned  char  y,i; 
            char *pc;
  uchar  BCD[3];
uchar get1302[7];
uchar appear[]={0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0};
void Delay   (  );
void enable  ();
void  display();//显示程序
//延时子程序
void delay()
{  
unsigned  int i=1000;
  while(i--) //for(i=6000;0   {
     ;  // continue;
     }
}
////////////////十六进制转十进制程序

void  H_BCD (uchar x)
{  
         //i,j,t1,t2;
    BCD [2]=x%10;
    BCD [1]=(x%100)/10;
    BCD [0]=x/100;
}
    
//////////写入数据子程序////////////////////////////
void W_data ()
{
         Delay();//判断液晶显示器是否忙
         RS=1;
         RW=0;
         PORTB=y;
       // enable();//写入控制命令子程序
         E=1;
         E=0;
}

//////写入控制命令子程序////////////////////////////
void enable  ()
{  Delay();
   RS=0;
   RW=0;
   PORTB =y;
   E=1;
   E=0;
}
///////判断液晶显示器是否忙///////////////////////
void Delay ()
{
    RS=0;
    RW=1;
    E=0;
    NOP();
    TRISB=0x80;
    E=1;
while(RB_7==1 )
     {
       RS=0;
       RW=1;
       E=0;
       NOP();
       E=1;
     }
     TRISB=0x00;
}
///////////////////////////////////////////////////////////////////////////

void  interrupt  adint(void)
  { 
      ADIF=0;//清/AD中断标志位
  }

////////系统 各I/O初始化子程序///////////////////////////////////////////
void  initial ()
{   TRISB=0;
    TRISC=0;
    TRISA=0x0ff;
}
//////////A/D转换初始化子程序//////////////////////////////
void  adinitial()
{
      ADCON1=15;//;设置RA为A/D甬道模拟输入
                   //;RC时钟。打开A/D转换器。先中通道0
     ADCON0=0x0c1;// B'11000001'   // ;A/D时钟为RC。RA0作A/D输入等
       ADIE=1; //时。开放中断
       ADIF=0; //清/AD中断标志位   PIR1,
       PEIE=1; //开放外围部件中断INTCON,
       GIE=1;   //开放总中断   INTCON,
}
/////往1302写入1Byte数据////////////////////////
void RTInputByte(uchar d) 

    uchar i;
    acc = d;
    TRISC=0x00;
    for(i=8; i>0; i--)
    {
      T_IO = acc0;//CARRY;//ACC0;  //*相当于汇编中的 RRC */
      T_CLK = 1;
      T_CLK = 0;
      acc = acc >> 1; 
    } 
}
///////从1302读取1Byte数据////////////////////////
uchar RTOutputByte(void) 

    uchar i;
    TRISC=0x80;
    for(i=8; i>0; i--)
    {
      acc = acc >>1;         //*相当于汇编中的 RRC */
      acc7= T_IO;// CARRY
      T_CLK = 1;
      T_CLK = 0;
    } 
     return(acc); 
}
///////先写地址,后写命令/数据//////////////////////////
void W1302(uchar ucAddr, uchar ucDa)
{
    T_RST = 0;
    T_CLK = 0;
    T_RST = 1;
    RTInputByte(ucAddr);      // /* 地址,命令 */
    RTInputByte(ucDa);        // /* 写1Byte数据*/
    T_CLK = 1;
    T_RST = 0;
}
///////先写地址,后读命令/数据////////////////////////
uchar R1302(uchar ucAddr)
{
    uchar ucData;
    T_RST = 0;
    T_CLK = 0;
    T_RST = 1;
    RTInputByte(ucAddr);            // /* 地址,命令 */
    ucData = RTOutputByte();        // /* 读1Byte数据 */
    T_CLK = 1;
    T_RST = 0;
    return(ucData);
}
/////////向1302写入 秒 分 时 日 月 星期 年 */////////////
void Set1302(uchar *pClock) 
{
    uchar i;
    uchar ucAddr = 0x80; 
    W1302(0x8e,0x00);           ///* 控制命令,WP=0,允许写操作*/
    for(i =7; i>0; i--)
    { 
      W1302(ucAddr,*pClock);    ///* 秒 分 时 日 月 星期 年 */ 
      pClock++;
      ucAddr +=2;
    }
     W1302(0x8e,0x80);          // /* 控制命令,WP=1,写保护*/
}
////////从1302读出 秒 分 时 日 月 星期 年 *//////////////////
void v_Get1302(unsigned char  ucCurtime[]) 
{
unsigned char i;
unsigned char ucAddr = 0x81;
for (i=0;i<7;i++)
   {
      ucCurtime[i] = R1302(ucAddr);///*格式为: 秒 分 时 日 月 星期 年 */
      ucAddr += 2;
   }
}
//////////拆字子程序///////////////////////////////////////
void  bcd_bcd( )
  {  uchar   a=6;


    for (i=0;i<=15;)
     {
           appear[i]=(get1302[a]&0xf0)/16;
           i++;
           appear[i]=get1302[a]&0x0f;
           i++;
           a--;
     }
}
////////按键扫描///////////////////////////////////////////////////
               
//////////按键扫描/////////////////////////////////////////////////
void   Key()
{  
   uchar a,b,c,i;
  di();
  a=PORTA ;
  if(56!=(a&56))
   { 
      display();
      a=PORTA ;
      if(56!=(a&56))
      { 
        for (b=0;b<14;)
          {
                uchar  z,x;
     
                for(z=50;z>0&&b<14;z--)
                  {    z--;
                      display();// delay();
                       delay();
                       a=PORTA;
                       a=a&56;
                       switch(a)
                        {
    
                            case 48 :
                                if(Ds1302[b]!=appear[b] ) 
                                   (appear[b])++;
                                    a=PORTA ;
                                  for(x=20;x>0&&56!=(a&56);x--)
                                   {   display();// delay();
                                       delay();
                                    } break; // 年  星期  月 日   时  分 秒  
                            case 40 : if(appear[b]!=0)(appear[b])--;
                                       a=PORTA ;
                                        for(x=20;x>0&&56!=(a&56);x--)
                                        {  display();// delay();
                                              delay();
                                        } break;//  年  星期  月 日   时  分 秒    
                            case 24 :  b++;   while( PORTA_5==0);     break;
                        }
                    }
                     
                     a=PORTA ;
                   for(z=50;( z>0&&56==(a&56));z--)
                   {  
                      
                      i=appear[b];
                      appear[b]=10;
                      display( );
                      delay();
                      appear[b]=i;
                      a=PORTA;
                     //a=a&56; 
                     z--;
                 
                    }
                   
          }
                 while( PORTA_5==0);
                  i=13;
                  c=12;
                for(b=0;b<7;b++)
                 {
                      DisCash[b]=((appear[c]&0x0f)*16)|(appear[i]&0x0f);
                       i=i-2;
                       c=c-2;
                 }
                 Set1302(&DisCash[0]); 
                 a=PORTA ;
       }  
    }

//////////显示子程序/////////////////////////////////////////////
void  display()//显示程序
{
      y=0x80;//0x0C0;写入起始地址
       enable();//写入控制命令子程序
      
       for(i=0;i<8;)
       {
          y=Data[ appear[i]];    // 1';//0x47;
          W_data ();//写入数据子程序
       // delay();
           i++;
           y=Data[ appear[i]];    // 1';//0x47;
           W_data ();//写入数据子程序
       // delay();
           i++;
           y='-'; // 1';//0x47;
           W_data ();//写入数据子程序
        //delay();
       }
        y=0x0C0;
        enable();//写入控制命令子程序
        for(i=8;i<14;)
         {
             y=Data[appear[i]];    // 1';//0x47;
             W_data ();//写入数据子程序
                //delay();
               i++;
               y=Data[appear[i]];    // 1';//0x47;
               W_data ();//写入数据子程序
               // delay();
                i++;
                y=':';    // 1';//0x47;
                W_data ();//写入数据子程序
                // delay();
       
          }
             y='-';    // 1';//0x47;
             W_data ();//写入数据子程序
             // delay();

          for(i=0;i<3;i++)
               {
        
                 y=Data[ BCD[i]];    // 1';//0x47;
                 W_data ();//写入数据子程序
                }
}
///////主程序//////////////////////////////////////////////////////
void main()
{   
    // TRISB=0x00;
    // TRISC=0x00;
         Set1302(&DisCash[0]);
        initial ();//系统 各I/O初始化子程序
        adinitial();//A/D转换初始化子程序/
        y=0x01;//PORTB
        enable();//写入控制命令子程序
        y=0x38;//8位2行5X7点阵0x3c
        enable();//写入控制命令子程序
        y=0x0C;//显示器开,F=光标开,闪烁开。
        enable();//写入控制命令子程序
        y=0x06; //文字不动,光标自动右移。
        enable();//写入控制命令子程序

///////////////////////////////////////////////////
   while(1)
   {
        v_Get1302(get1302);//从1302读出 秒 分 时 日 月 星期 年 
       bcd_bcd(get1302);//拆字子程序
       H_BCD ( ADRES ); //十六进制转十进制程序
       ei();
       ADGO=1;      //启动A/D转换 ADCON0,
       
       display();
        Key();
    }  
}

关键字:PIC单片机  LCD  DS1302  AD程序 引用地址:PIC单片机+LCD+DS1302+AD程序

上一篇:用Pic单片机控制8路MG995舵机(servo motor)的实现方法
下一篇:pic系列单片机复位电路

推荐阅读最新更新时间:2024-03-16 15:09

面板厂瀚宇彩晶欲扩大LCD产能
面板厂瀚宇彩晶(HannStar Display)计划投资170亿元新台币(约合6.074亿美元)以增加每月30000片玻璃基板的LCD面板产能,新产能预计将于2023年上线。 据《电子时报》报道,瀚宇彩晶的5.3G工厂目前每月可加工约130,000-140,000块玻璃基板,此次投资将是该工厂自2005年投产以来的首次扩产。 瀚宇彩晶表示,新产能将主要用于生产智能手机、可穿戴设备、平板电脑、工业控制和汽车所用的中、小尺寸面板,以及推动Mini/Micro LED的发展。 在宅经济的强劲需求下,IT面板的订单一直在增加,从而推高了价格。瀚宇彩晶预计第二季度毛利率或超过50%,其中中尺寸面板预期将贡献50%以上的收入。
[手机便携]
用PICC编译器开发PIC单片机的代码
引言 目前,在市场上应用最广泛的应该属于8位单片机,Microchip Technoloogy公司推出的8位PIC系列单片机,目前在国内市场上深受用户欢迎,已经逐渐成为单片机应用的新潮流;但遗憾的是,目前国内介绍它的C语言开发工具的书籍和文章却比较少,而且用的人也不多,广大的程序员在用其开发的过程中都在慢慢摸索,可能会走一些弯路。笔者最近在用PIC的C语言时就遇到了好些问题,在这里想和最近一段时间用PIC的C语言的一些经验和广大的底层软件程序员做一下交流和介绍希望本文对用PICC开发PIC系列单片机的人有所帮助。 目前,在国内用得比较多的是Hi-Tech的Hi-Tech PICC编译器,而且目前市场上一些国内的PIC单片机仿真
[单片机]
LCD电视背光照明中的设计挑战
设计挑战 由于LCD电视是消费品,压倒一切的设计考虑是成本—当然必须满足最低限度的性能要求。驱动灯的CCFL逆变器不能明显缩短灯的寿命。还有,由于要用高压来驱动灯,安全性也是一个必须考虑的因素。本文聚焦于LCD电视应用中,驱动多个CCFL时所要面对的三个关键的设计挑战:挑选最佳的驱动架构、多灯驱动、以及灯频和突发调光频率的精密度控制。 挑选最佳的驱动架构 可以用多种架构产生驱动CCFL所需的交流波形,包括Royer (自激)、半桥、全桥和推挽。表1详细归纳了这四种架构各自的优缺点。 表1. CCFL驱动架构比较 Drive Architecture Advantages Disadvantages Royer Least
[嵌入式]
<font color='red'>LCD</font>电视背光照明中的设计挑战
超轻薄化,无惧经济寒冬,LCD TV表现亮眼
拓墣产业研究所(TRI)指出,受惠于ASP持续下滑,以及新兴市场销售增长,2009年全球LCD TV出货量可望逆势增长25%达到1.26亿台;而台湾LCD TV出货量虽仍维持增长,但YoY恐缩小为27%。 TRI研究员张乘维表示,预计冠捷(TPV)、纬创(Wistron)、仁宝(Compal)将以超过50%的增长率领先其它台厂。另一方面,“超轻薄化”、“网络化”、“无线传输”、“高动态化”和“节能化”,将是2009年LCD TV发展的观察重点。 拓墣产业研究所指出,中国、中东和拉丁美洲等新兴市场LCD TV渗透率仅3成左右,且以LCD TV取代CRT TV的需求仍强,加上2009年新兴市场占全球LCD T
[家用电子]
LCD的时间控制器
说明: 本带LCD的时间控制器,是在本人毕业时间《基于单片机的时间控制器的设计》的基础上进行修改的。 使得时间的控制和修改更容易,更直观。并扩展了红外遥控的功能,但由于条件限制,并没有把此功能 的程序加上。 按键说明: K1 设置当前时间/按键超过1s,则置整点报时标志 K2 显示控制时间/小时加 K3 设置控制时间/分钟加 K4 控制ON/OFF设置/确定 K5 控制开/关 ELEC 继电器 SPK 蜂鸣器 Y_LED 继电器工作指示 C_LED 被控电器指示灯 W_LED 计时工作指示灯 D_LED 整点报时指示灯 实物图: 程序代码: ;==
[单片机]
带<font color='red'>LCD</font>的时间控制器
PIC单片机的学习——时钟的配置
一、概念 Fcy是CPU时钟,Fosc晶振频率。Fcy = Fosc/2,也就是CPU时钟是晶振频率的1/2。 二、寄存器的配置 例子如下: //系统时钟初始化 产生55.296M //11.0592M晶振 // Fosc= Fin*M/(N1*N2), Fcy=Fosc/2 // Fosc= 11.0592M*60/(2*3)=110.592Mhz for 11.0592M input clock // Fcy= Fosc/2 = 55.296MHZ PLLFBD = 58; //M=PLLFBD+2=60 CLKDIVbits.PLLPOST = 0; // N2=2*(PLLPOST
[单片机]
TFT-LCD液晶显示器的工作原理
时至今日, 液晶显示器, 对于一般普罗大众, 已经不再是生涩的名词. 而它更是继半导体后 另一种可以再创造大量营业额的新兴科技产品, 更由于其轻薄的特性, 因此它的应用范围比起原先使用阴极射线管(CRT, cathode-ray tube)所作成的显示器更多更广. 如同我前面所提到的, 液晶显示器泛指一大堆利用液晶所制作出来的显示器. 而今日对液晶显示器这个名称, 大多是指使用于笔记型计算机, 或是桌上型计算机应用方面的显示器. 也就是薄膜晶体管液晶显示器. 其英文名称为Thin-film transistor liquid crystal display, 简称之TFT-LCD. 从它的英文名称中我们可以知道, 这一种显示器它的
[嵌入式]
第40章 STM32F429的LCD控制器LTDC基础知识和HAL库API
40.1 初学者重要提示 本章40.2小节中的几个知识点比较重要,比如DE同步模式和HV同步模式的区别,Alpha混合,水平消隐和垂直消隐等知识点尤其重要,需要大家理解透彻。 40.2 LTDC基础知识 LTDC的几个关键知识点放在开头说: 1、STM32F429的LTDC最大支持1024*768分辨率,且支持硬件双图层。实际支持的分辨率可能比1024*768要高一点,因为最终可以支持的最大分辨率是芯片后期定标的。 2、支持32位色,24位色,16位色和8位色。 3、可编程窗口位置和大小,可编程行同步,场同步和数据使能信号的极性。 4、查色表 (CLUT,Color look-up table),每个图层最高可
[单片机]
第40章 STM32F429的<font color='red'>LCD</font>控制器LTDC基础知识和HAL库API
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved