/*
闪烁灯实验
运动指示灯直接接在P55口上
只要控制io口相应电平变化即可
*/
#include "stc8axx.h"
#define DIS_STB P02 //SPI
#define DIS_SCK P01 //SPI
#define DIS_DIO P00 //SPI
unsigned char Display_Value[4]={0,0,0,0};
const unsigned DISP_TAB[] ={0xFE,0x82,0xB9,0xAB,0xC3,0x6B,0x7B,0xA2,0xFB,0xEB};//0 ~ 9
const unsigned char DISP_POSITION[4]={0xc0,0xc2,0xc4,0xc6};
unsigned char keyvalue[5]={0,0,0,0,0};
void delayms(unsigned int m)
{
int a, b;
for(a=0;a<5000;a++)
for(b=0;b<m;b++);
}
void TM1628_Send_Byte(unsigned char dat)
{
unsigned char i;
for (i = 0; i < 8; i++)
{
DIS_SCK=0;
if (dat & 0x01){DIS_DIO=1;}
else{DIS_DIO=0;}
dat >>= 1;
DIS_SCK=1;
}
}
void Updata_Display(unsigned int indata)
{
Display_Value[3] = DISP_TAB[indata%10];
Display_Value[2] = DISP_TAB[(indata%100)/10];
Display_Value[1] = DISP_TAB[(indata%1000)/100];
Display_Value[0] = 0X00;//DISP_TAB[indata/1000];
}
/*********************************************
*固定地址送数据
*********************************************/
void Display_OneByte(unsigned char dat , unsigned char addr)
{
TM1628_Send_Byte(0x03);
DIS_STB=1;
DIS_STB=0;
TM1628_Send_Byte(0x44); //单数据模式
DIS_STB=1;
DIS_STB=0;
TM1628_Send_Byte(addr);
TM1628_Send_Byte(dat);
DIS_STB=1;
DIS_STB=0;
TM1628_Send_Byte(0x8F);
DIS_STB=1;
}
void readkey(void)
{
unsigned char i,j;
DIS_STB=1;
DIS_STB=0;
TM1628_Send_Byte(0x42); //read key command
DIS_DIO=1;
delayms(1);
for(j=0;j<5;j++)
{
for(i=0;i<8;i++)
{
DIS_SCK=0;
DIS_SCK=1;
if(DIS_DIO)
{
keyvalue[j]=keyvalue[j]|0x80;
}
keyvalue[j]=keyvalue[j]>>1;
}
}
DIS_STB=1;
}
void Display(void)
{
unsigned char num;
for(num=0;num<4;num++)
{
Display_OneByte(Display_Value[num] , DISP_POSITION[num]);
}
}
main()
{
unsigned int temp=0;
delayms(200);
Updata_Display(000);
Display();
delayms(100);
//Updata_Display(111);
//Display();
//delayms(100);
//Updata_Display(222);
//Display();
//delayms(100);
//Updata_Display(333);
//Display();
//delayms(100);
//Updata_Display(444);
//Display();
//delayms(100);
Updata_Display(555);
Display();
delayms(100);
Updata_Display(666);
Display();
delayms(100);
Updata_Display(777);
Display();
delayms(100);
Updata_Display(888);
Display();
delayms(100);
Updata_Display(999);
Display();
delayms(100);
while(1)
{
readkey();
if(keyvalue[2]==0x01)
{
Updata_Display(111); //
Display_Value[0] = 0x20; //DISP_TAB[indata/1000]; S6
Display();
}else if(keyvalue[3]==0x01)
{
Updata_Display(222); //
Display_Value[0] = 0x10; //DISP_TAB[indata/1000]; S5
Display();
}else if(keyvalue[2]==0x08)
{
Updata_Display(333); //
Display_Value[0] = 0X40; //DISP_TAB[indata/1000]; S5
Display();
}else if(keyvalue[1]==0x08)
{
Updata_Display(444); //
Display_Value[0] = 0x08; //DISP_TAB[indata/1000]; S5
Display();
}else
{
delayms(10);
}
P55=1;
delayms(5);
P55=0;
//delayms(10);
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
收起资源包目录
TM1628+STC8A.zip (2个子文件)
TM1628+STC8A
TM1628_key_ledcode.c 3KB
TM1628_key_led.PCB 284KB
共 2 条
- 1
ksoa6000
- 粉丝: 7
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0