• 大小: 7KB
    文件类型: .c
    金币: 1
    下载: 0 次
    发布日期: 2021-06-03
  • 语言: 其他
  • 标签: TM1629  驱动  

资源简介

TM1629的驱动程序LCD+数码管+按扫描 很详细很完整

资源截图

代码片段和文件信息


#include
#include
#define nop _nop_();
#define uchar unsigned char
#define uint  unsigned int
sbit stb =P1^0; //定义片选通讯口
sbit clk =P1^1; //定义时钟通讯口
sbit dio =P1^2; //定义数据输入/输出通讯口
bdata uchar y=0;//定义可以位寻址全局变量y
sbit y7 =y^7;
uchar show[16] = {0x760x7b0x380x380x3f0x400x400x400x400x40};//初始化显示“HELLO”字符代码
uchar CODE[10] = {0x3f0x060x5b0x4f0x660x6d0x7d0x070x7f0x6f}; //0~9显示代码
uchar TIME_secondsseconds_2sub_1sub_2shi_1shi_2; //时间寄存器依次从秒个位至小时十位
uchar TIME_count; //定时中断控制制位
uchar T_count;   //时钟小数点闪
uchar count4;    //保存按键控制对应的数码管闪
uchar key_FLAG1;//按键标志位
uchar key_COUNT1;//按键移动数动显示数据
uchar key_LED=0;  //按键单独显示赋值寄存器
uchar count7;
/*********************************   
功能: TM1629写数据
**********************************/
void write(uchar wr_data)
{
     uchar i;
 stb =0;    //给有效的片选信号(片选信号是低电平有效)
 nop;
 nop;  
 for(i=0;i<8;i++)//开始传送8位数据,每循环一次传送一位数据
 {
     clk =0;
 nop;
 nop;
     wr_data >>= 1;//移位数据,低位在前!
     nop;
     dio = CY;
     nop;
     nop;
     clk =1;
     nop;
   }
}
/*********************************  
功能:读按键子程序 由y 返回1BIT按键数据
**********************************/
unsigned char read()
{
  uchar d;
  stb = 0;   //给有效的片选信号(片选信号是低电平有效)
  dio = 1;   //将DIO置高,因为没有按键按下时,键值默认为00H,此时为了与键值有区别
  for(d=0;d<8;d++)
   {
     clk = 0;
 nop;
   if(dio==1)
     {
     y7 = 1;
 }
  else
     {
 y7 = 0;
 }
 clk = 1;
 if(d!=7){y=(y>>1);}   
 nop;
 nop;
}
return(y);
}     
/*********************************
    TM1629控制指令
功能: 驱动LED屏做相应的显示
**********************************/
void xianshi(uchar show_led[16])
{
  uchar h;
  stb = 1;
  clk = 1;
  dio = 1;
  write(0x40);//写数据到显示寄存器,采用地址自动加一
  stb = 1;
  write(0xc0);//显示寄存器的00H单元开始
  for(h=0;h<16;h++)
  {    
   write(show_led[h]);//给显示寄存器送数据,
   }
   stb=1;
   write(0x8b);//显示控制参数,点亮数码屏幕,亮度可以通过改变低三位调节
   stb = 1;
}

//-------读按键以及相应的显示处理-------
void panjian()
{
   uchar count3key[4];
   stb = 1;
   write(0x42);//送读按键命令(42H),
   for(count3=0;count3<5;count3++)
   {
     key[count3]=read(); //读4BIT按键数据,
   }
   if((key_FLAG1 != 0x02))
   {
   if((key[0]==0x01)){key_LED= 0;key_FLAG1 = 0x01;show[key_COUNT1] = CODE[key_LED];} //K3与SEG1按键按下,数码管显示数字0
   if((key[0]==0x02)){key_LED= 1;key_FLAG1 = 0x01;show[key_COUNT1] = CODE[key_LED];} //K2与SEG1按键按下,数码管显示数字1
   if((key[0]==0x04)){key_LED= 2;key_FLAG1 = 0x01;show[key_COUNT1] = CODE[key_LED];} //K1与SEG2按键按下,数码管显示数字2。
   if((key[0]==0x08)){key_LED= 3;key_FLAG1 = 0x01;show[key_COUNT1] = CODE[key_LED];} //K0与SEG2按键按下,数码管显示数字3。
   if((key[0]==0x80)){key_LED= 4;key_FLAG1 = 0x01;show[key_COUNT1] = CODE[key_LED];} //K0与SEG3按键按下,数码管显示数字4。
   if((key[0]==0x40)){key_LED= 5;key_FLAG1 = 0x01;show[key_COUNT1] = CODE[key_LED];} //K1与SEG3按键按下,数码管显示数字5。
   if((key[0]==0x20)){key_LED= 6;key_FLAG1 = 0x01;show[key_COUNT1] = CODE[key_LED];} //K2与SEG4按键按下,数码管显示数字6。
   if((key[0]==0x10)){key_LED= 7;key_FLAG1 = 0x01;show[

评论

共有 条评论