P1=10101010-->如果你不声明10101010是【二进制】类型的数据,那单片机就当成了十进制的10101010,即0x9A2112,实际结果是向端口赋值0x12,那当然和P1=0xAA不同了!
二进制和十进制一样右边是低位左边是高位,从右到左就是从低到高,所以要从低位读到高位么就要从右边开始读,1~8灯连接的是p1.0~p1.7,当p1=0xaa=0b10101010,那么1,3,5,7灯对应的是0,所以是1,3,5,7灯亮,如果要2,4,6,8灯亮么只要按位取反p1=0b01010101=0x55就行了。要学单片机的话我建议你先找本数电的书看看吧,最基本的二进制码都没搞明白,难。
十六进制的 0xAA 确实是和二进制的 10101010 一样,但,关键是程序里没有直接的二进制写法啊,你这个 10101010 是十进制啊。转换成 16 进制就是:0x9A2112,这和 0xAA 可差多喽。
keil中无法直接使用二进制数,就是说你写的10101010是十进制。可以找个头文件#include,之后就能写P1=b10101010了