?? show.c
字號:
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
// 功能描述: &
// 本程序?yàn)轱@示程序,上電后顯示255 &
// 主要目的:熟悉硬件,以及不影響其它位的顯示編程 &
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//【聲明】 此程序僅用于學(xué)習(xí)與參考,引用請注明版權(quán)和作者信息!
//【聲明】 作者: PIAE小組
#include <reg52.h>
#include <intrins.h>
//對管腳分配進(jìn)行了定義
//對子函數(shù)進(jìn)行了聲明
# define uchar unsigned char
# define uint unsigned int
# define NOPS {_nop_();_nop_();_nop_();_nop_();_nop_();}/*延時(shí)5us*/
//編碼規(guī)則是hgfedcba ,h亦是dp,控制小數(shù)點(diǎn),這里都設(shè)為1,不亮,eg:9==0b10010000;
uchar code led[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
uchar Show_Data = 0xff;//數(shù)碼管要顯示的數(shù)據(jù)
//IO 口分配
sbit LED_RED = P2^1;//紅色指示燈,作為接收指示燈
sbit LED_GRE = P2^2;//綠色指示燈,作為發(fā)送指示燈
sbit SJA1000_CS = P2^0;//SJA1000片選管腳. 低電平有效
void Delay(uchar delay_time); //延時(shí)程序
void led_seg7(uchar from,uchar number); //數(shù)碼管顯示程序
void main(void)
{
_nop_();
while(1)
{
NOPS;
led_seg7(1,Show_Data);
LED_RED = !LED_RED;
LED_GRE = !LED_GRE;
}
}
//延時(shí)程序
void Delay(uchar delay_time)
{
while(delay_time--)
{}
}
//from(1_4):數(shù)碼管顯示起始位置(從右到左),number:顯示的數(shù)
//eg: leg_seg7(2,7)
void led_seg7(uchar from,uchar number)
{
uchar digit,temp_l;
uchar temp_h=0x7f; //0b0111111
temp_h = _cror_(temp_h,from-1); //確定從哪一位開始顯示,即確定高四位,
//假設(shè)從第一位開始,temp_h==0b10111111
temp_h = temp_h & 0xf0; //取高四位,temp_h==0b10110000
temp_l = P2 & 0x0f; //取P2的低四位(c51默認(rèn)下都是高電平),temp_l==0b00001111
P2 = temp_h | temp_l; //設(shè)定P2口 P2==0b1011111|0b00001111
//P2==0b1011111,0xbf;
if(number==0) //如果number==0的話,立即發(fā)送0的數(shù)碼管碼
{
P0 = led[0];
Delay(10);
P0 = 0xff;
}
else
{
while(number) //如果數(shù)字式大于0,就永遠(yuǎn)死循環(huán),eg:number==7
{
digit = number%10 ; //eg:digit=7%10,digit==7;
number /= 10; //eg:number=7/10,number==0;
P0 = led[digit] ; //送數(shù)碼管碼,eg:7亦是0xf8
Delay(10);
temp_h = P2 & 0xf0; //取P2的高四位,eg:temp_h=0=0b1011000;
temp_h = temp_h | 0x0f; //拼裝 temp_h,進(jìn)行位選,eg:temp_h==0b1011111
temp_h = _cror_(temp_h,1); //eg:temp_h==0b11011111;
temp_h = temp_h & 0xf0; //取高四位,eg:temp_h==0b11010000
temp_l = P2 & 0x0f; //取P2的低四位, eg:temp_l==0b101111&0b00001111,temp_l==0b00001111;
P0 = 0xff; //數(shù)碼管清除
P2 = temp_h | temp_l; //設(shè)定P2口,eg:P2==0b11010000|0b00001111,P2==0b11011111;
}
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -