久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
51單片機鍵盤芯片74C922驅動代碼
[打印本頁]
作者:
irisice008
時間:
2019-5-28 10:40
標題:
51單片機鍵盤芯片74C922驅動代碼
74C922.PNG
(81.93 KB, 下載次數: 39)
下載附件
2019-5-31 08:11 上傳
#include <reg51.h>
#include <intrins.h>
#include <math.h>
#include <stdlib.h>
#define uchar unsigned char
#define uint unsigned int
#define nop() _nop_()
const float ZERO = 0.1;
uchar key = 16;
long intValue = 0;
float pointValue = 0.0;
float mixValue = 0.0;
uchar pointPos = 0;
uchar numCount = 0;
uchar pointCount = 0;
uchar intFlag = 0;
uchar code SEG_DAT[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar code BIT_CS[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
void display(float floatValue);
sbit SH_CP = P0^0; //移位串行時鐘脈沖
sbit DS = P0^1; //串行數據輸入
sbit ST_CP = P0^2; //數據并行輸出鎖存器控制脈沖
void delay(uint t)
{
uint i,j;
for(i=0;i<t;i++)
{
if (intFlag == 1)
{
display(mixValue*100);
}
else
{
display(mixValue);
}
for(j=0;j<120;j++);
}
}
//串行輸入子程序
void Serial_Input_595(uchar dat)
{
uchar i;
for (i = 0; i < 8; i++)
{
if (dat&0x80) //發送高位
{
DS = 1;
}
else
{
DS = 0;
}
dat <<= 1; //次高位左移到高位
SH_CP = 0; //移位時鐘線拉低
nop();
nop();
SH_CP = 1; //DS位上的0或1在移位脈沖上升沿被移入595
nop();
nop();
}
}
//并行輸出子程序
void Parallel_Output_595()
{
ST_CP = 0;
nop();
nop();
ST_CP = 1; //上升沿將數據送到輸出鎖存器
nop();
nop();
}
void display(float floatValue)
{
uchar i=0;
uchar a[6];
uchar temp;
long intValue;
if (floatValue<ZERO)
{
numCount = 0;
pointPos = 0;
pointCount = 0;
intValue = 0;
pointValue = 0;
mixValue = 0;
intFlag = 0;
floatValue = 0;
}
switch (pointCount)
{
case 0:
intValue = floatValue;
break;
case 1:
intValue = floatValue*10;
break;
case 2:
intValue = floatValue*100;
break;
case 3:
intValue = floatValue*1000;
break;
case 4:
intValue = floatValue*10000;
break;
case 5:
intValue = floatValue*100000;
break;
case 6:
intValue = floatValue*1000000;
break;
default:
break;
}
a[0]=intValue/100000;
a[1]=(intValue%100000)/10000;
a[2]=(intValue%10000)/1000;
a[3]=(intValue%10000%1000)/100;
a[4]=(intValue%10000%1000%100)/10;
a[5]=intValue%10;
for(i = 0; i <= 5; i++)
{
Serial_Input_595(BIT_CS[i]);
temp=a[i];
if (pointPos == 0)
{
Serial_Input_595(SEG_DAT[temp]);
Parallel_Output_595();
}
else
{
//if (i == (5 + pointPos - numCount))
if (i == 5 - (numCount - pointPos))
{
Serial_Input_595(SEG_DAT[temp]|0x80);
}
else
{
Serial_Input_595(SEG_DAT[temp]);
}
Parallel_Output_595();
}
}
}
uchar translate(uint keyCode)
{
switch(keyCode)
{
case 0:
return '7';
break;
case 1:
return '4';
break;
case 2:
return '1';
break;
case 3:
return 'c';
break;
case 4:
return '8';
break;
case 5:
return '5';
break;
case 6:
return '2';
break;
case 7:
return '0';
break;
case 8:
return '9';
break;
case 9:
return '6';
break;
case 10:
return '3';
break;
case 11:
return '=';
break;
case 12:
return '/';
break;
case 13:
return '*';
break;
case 14:
return '-';
break;
case 15:
return '+';
break;
default:
break;
}
}
void extern0_init(void)
{
IT0=1;
EX0=1;
EA=1;
}
void extern0(void) interrupt 0
{
key = translate(P1 & 0x0f);
if (key <= '9' && key >= '0') //判斷按下的鍵是否為數值
{
numCount++;
if (pointPos == 0)
{
intValue = intValue*10 + (key-'0');
}
else
{
pointCount++;
switch (pointCount)
{
case 1:
pointValue = pointValue + (key-'0')*0.1;
break;
case 2:
pointValue = pointValue + (key-'0')*0.01;
break;
case 3:
pointValue = pointValue + (key-'0')*0.001;
break;
case 4:
pointValue = pointValue + (key-'0')*0.0001;
break;
case 5:
pointValue = pointValue + (key-'0')*0.00001;
break;
case 6:
pointValue = pointValue + (key-'0')*0.000001;
break;
}
}
mixValue = intValue + pointValue;
if(mixValue>=ZERO && mixValue<=999999.0) //當前數值是否超出限定范圍
{
}
else
{
numCount = 0;
pointPos = 0;
pointCount = 0;
intValue = 0;
pointValue = 0;
mixValue = 0;
intFlag = 0;
}
}
else
{
switch (key)
{
case 'c':
numCount = 0;
pointPos = 0;
pointCount = 0;
intValue = 0;
pointValue = 0;
mixValue = 0;
intFlag = 0;
break;
case '=':
pointPos = numCount; //記錄小數點的位置
break;
case '-':
if (pointCount == 0)
{
numCount = 0;
pointPos = -2;
intFlag = 1;
}
while(mixValue>ZERO)
{
mixValue = mixValue - 0.254;
delay(10);
}
if (mixValue<=ZERO)
{
numCount = 0;
pointPos = 0;
pointCount = 0;
intValue = 0;
pointValue = 0;
mixValue = 0;
intFlag = 0;
}
break;
}
}
}
void main(void)
{
extern0_init();
mixValue = -5;
while(1)
{
if (intFlag == 1)
{
display(mixValue*100);
}
else
{
display(mixValue);
}
}
}
復制代碼
全部資料51hei下載地址:
74C922.rar
(84.54 KB, 下載次數: 10)
2019-5-31 08:11 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
admin
時間:
2019-5-28 19:47
本帖需要重新編輯補全電路原理圖,源碼,詳細說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
国产亚洲一区二区三区在线观看
|
在线免费观看黄a
|
国产在线视频一区
|
嫩草懂你的影院入口
|
国产丝袜一区二区三区免费视频
|
福利视频1000
|
福利影院在线看
|
黄网站色大毛片
|
另类视频在线
|
天天色综
|
国产成人精品一区二三区在线观看
|
亚洲视频www
|
欧美亚洲视频在线观看
|
欧洲精品码一区二区三区免费看
|
午夜天堂
|
欧美理论片在线观看
|
伊人在线
|
日韩在线国产
|
久艹av
|
欧美va大片
|
久久精品91
|
久久久精品
|
色综合av
|
天天摸天天干
|
av男人的天堂av
|
欧美在线高清
|
99re在线观看
|
狠狠亚洲
|
97伦理
|
精品在线一区二区
|
国产乱码一二三区精品
|
羞羞的视频免费看
|
国产精品99久久久久久久vr
|
8x国产精品视频一区二区
|
九九热这里
|
日韩精品一区二区三区中文在线
|
亚洲在线免费
|
国产精品视频一区二区三
|
精品国产18久久久久久二百
|
亚洲网一区
|
日韩欧美在线视频
|